精华内容
下载资源
问答
  • threading.thread 传入参数
    2021-05-01 20:13:42

    python中的线程threading.Thread()的一个坑

           在一开始学习threading.Thread时发现其标准的写法是threading.Thread(target=函数名, args=函数的参数),后来觉得要多输入target、args还有两个=号,觉得多次一举,可不可以直接使用threading.Thread(函数名(函数的参数))来开启线程,实践了一个程序,运行结果也和之前写法的运行结果一样,后来就按照这种省略的写法写了,直到遇到一个多线程的程序,发现程序写好后怎么都是只运行一个线程,百思不得其解,后来发现如果写成threading.Thread(函数名(函数的参数)),连线程名.start()都不用写,程序就会直接运行了,所以分开了写是为了防止合并写解释器直接就将其当做函数运行,这是我的理解,所以大家建议大家不能偷懒。我是初学者,第一次发python的帖子,也盼高手帮我看下说得对不对,谢谢!

     

    更多相关内容
  • 1. 线程的概念:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个...2. threading.th...

    1. 线程的概念:

    线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

    2. threading.thread()的简单使用

    2.1 python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用

    import threading

    import time

    def saySorry():

    print("亲爱的,我错了,我能吃饭了吗?")

    time.sleep(1)

    if __name__ == "__main__":

    for i in range(5):

    t = threading.Thread(target=saySorry)

    t.start() #启动线程,即让线程开始执行

    运行结果:

    08e688f26f1b27a94bcc42a5f945b56a.png

    使用说明:

    可以明显看出使用了多线程并发的操作,花费时间要短很多

    当调用start()时,才会真正的创建线程,并且开始执行

    每个线程都有一个唯一标示符,来区分线程中的主次关系

    主线程:mainThread,Main函数或者程序主入口,都可以称为主线程

    子线程:Thread-x 使用 threading.Thread() 创建出来的都是子线程

    线程数量:主线程数 + 子线程数

    2.2 主线程会等待所有的子线程结束后才结束

    import threading

    from time import sleep,ctime

    def sing():

    for i in range(3):

    print("正在唱歌...%d"%i)

    sleep(1)

    def dance():

    for i in range(3):

    print("正在跳舞...%d"%i)

    sleep(1)

    if __name__ == "__main__":

    print("---开始---:%s"%ctime())

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    t1.start()

    t2.start()

    #sleep(5) # 屏蔽此行代码,试试看,程序是否会立马结束?

    print("---结束---:%s"%ctime())

    8b2c07d9cdee0b73739fc9169a68f2d5.png

    3.查看线程数量

    import threading

    from time import sleep,ctime

    def sing():

    for i in range(3):

    print("正在唱歌...%d"%i)

    sleep(1)

    def dance():

    for i in range(3):

    print("正在跳舞...%d"%i)

    sleep(1)

    if __name__ == "__main__":

    print("---开始---:%s"%ctime())

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    t1.start()

    t2.start()

    while True:

    length = len(threading.enumerate())

    print("当前运行的线程数为:%d"%length)

    if length<=1:

    break

    sleep(0.5)

    80e19a79a9bd403bfb1710b11434406f.png

    4.线程参数及顺序

    4.1 传递参数的方法:

    使用args 传递参数 threading.Thread(target=sing, args=(10, 100, 100))

    使用kwargs传递参数 threading.Thread(target=sing, kwargs={“a”: 10, “b”:100, “c”: 100})

    同时使用 args 和 kwargs 传递参数 threading.Thread(target=sing, args=(10, ), kwargs={“b”: 100,“c”: 100})

    4.2 线程的执行顺序

    import socket

    import threading

    import time

    def sing():

    for i in range(10):

    print("------------------------------")

    time.sleep(0.5)

    def dance():

    for i in range(10):

    print("-----")

    time.sleep(0.5)

    if __name__ == "__main__":

    # 创建两个子线程

    t1 = threading.Thread(target=sing)

    t2 = threading.Thread(target=dance)

    # 启动子线程

    t1.start()

    t2.start()

    说明:

    从代码和执行结果我们可以看出,多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。

    5. 守护线程

    守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。

    5.1 如下代码,主线程已经exit() 【其实并没有真正结束】,子线程还在继续执行

    import threading

    import time

    def test():

    for i in range(10):

    print("test is run:", i)

    time.sleep(1)

    if __name__ == "__main__":

    # 创建子线程

    t1 = threading.Thread(target=test)

    # 启动子线程

    t1.start()

    # 休眠2秒

    time.sleep(2)

    print("我 OVER 了")

    # 退出

    exit()

    8121bcd747175333c38bd751fcabcef8.png

    5.2 设置守护线程

    设置为守护线程(如果主线程结束了,也随之结束)

    线程.setDaemon(True)

    9d416896019753db07ac14d2e3ad8c9d.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

    展开全文
  • 先来看这段代码: import threading import time def worker():  print “worker”  time.sleep(1)  return for i in xrange(5): ... t = threading.Thread(target=worker)  t.start()

    先来看这段代码:

    import threading

    import time

    def worker():

        print “worker”

       time.sleep(1)

       return

    for i in xrange(5):

         t = threading.Thread(target=worker)

         t.start()

    这段代码就使用了多线程,但是没法传递参数,而实际使用多线程,往往是需要传递参数的,于是问了一位群里的网友后,知道可以这么写实现传递参数的多线程:

    import threading

    import time

    def worker(number):

        print “worker”

        time.sleep(number)

        return

    for i in xrange(5):

        t = threading.Thread(target=worker,args=(i,))

        t.start()

    第一个参数是函数名,第二个参数args是一个元组,如果只传递一个值,就只需要i, 如果需要传递多个参数,那么还可以继续传递下去其他的参数。特别注意其中的逗号不能少,少了就不是元组了,就会报错。

    展开全文
  • import threading def task(self, call_back): self.download() if call_back: # 回调pbms self.call_back() def main(self, call_back=True): # gevent.spawn(self.download, call_back).join() t...
    import threading
    
    def task(self, call_back):
    
    	self.download()
    
    	if call_back:
    		# 回调pbms
    		self.call_back()
    
    def main(self, call_back=True):
    
           # gevent.spawn(self.download, call_back).join()
    	threading.Thread(target=self.task, args=(call_back,)).start()
    	## 或者
    	threading.Thread(target=self.task, kwargs=({'call_back':call_back})).start()
    
    展开全文
  • 参考下面的网址 ...自己实现了一下运行效果如下 import threading import time from datetime import datetime def Test(name): for i in range(3):
  • Python线程模块threading:https://docs.python.org/zh-cn/3/library/threading.html 1、Python的threading模块定义了许多类,该模块的设计基于Java的线程模型。...Python 的Thread类只是 Java 的 Thread 类的一个..
  • python threading.thread

    2020-12-15 12:52:30
    另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承threading.Thread类来创建线程的例子:Python12345678910111213...
  • 在前置的学习过程中遇到了tensorflow的一些问题,就想着用进程或者线程来...而Process创建的子进程跟主进程是完全隔离的,如果要用到主进程的变量,就必须作为参数传入,即使将所需变量设置为global也无效(因为设置.
  • import threading import time class MyThread(threading.Thread): ... msg = "I'm " + self.name + '@' + str(i) # name属性保存的是当前线程的名称没有传入则默认Thread-num num为正整数 print(ms.
  • threading.Timer()做定时器

    千次阅读 2020-09-17 17:38:11
    似乎python中的定时器...tkinter窗口的after函数就是这样,本文介绍的threading.Timer也是这样的机制。 import time import threading def createTimer(): t = threading.Timer(2, repeat) t.start() def rep
  • System.Threading.Thread类构造方法接受一个ThreadStart委托,改委托不带参数,无返回值 1 public static void Start1() 2 { 3 Console.WriteLine("this is main thread!:{0},{1}", System.Threading.Th.....
  • Java 给Thread传递参数

    2021-02-12 17:33:28
    经过查找,最终用如下方法传递了参数:也就是用另外一个有参函数setTar()传递参数。调用的时候用这4行code传递参数:上面是用implements Runnable的方法传递参数。下面是第二种方法(对应Thread的第一种方法),没有...
  • python:threading.Thread类的使用详解

    千次阅读 2018-07-26 01:04:14
    Python Thread类表示在单独的控制线程中运行...mthread=threading.Thread(target=xxxx,args=(xxxx)) mthread.start() 2、在子类中重写run() 方法  这里举个小例子: import threading, time class MyThread(thr...
  • class get_article_content(object):#对象属性只有传入的是初始值和末位置 """抓取文章内容类""" .............................省略 def run(initial_value, last_value): article_urls = get_article_content....
  • C# System.Threading.Tasks.Task

    千次阅读 2022-02-26 11:37:41
    System.Threading.Tasks 程序集: mscorlib.dll, netstandard.dll 表示一个异步操作。 继承 Object Task 派生 System.Threading.Tasks.Task<TResult> 实现 IAsyncResult 注解 Task类表示不返回值...
  • python多线程模块:threading使用方法(参数传递)

    万次阅读 多人点赞 2017-01-12 19:51:58
    转自:http://www.mianfeidianhua.net/threading.html ...import threading import time def worker(): print “worker” time.sleep(1) return for i in xrange(5): t = threading.Thr...
  • 1、开启两个线程分别执行函数 ...import threading def sing(): for i in range(5): # 子线程 print("----正在唱------") time.sleep(1) def dance(): for i in range(5): # 子线程 p...
  • target : 指定 这个线程去哪个函数里面去执行代码 args: 指定将来调用 函数... args参数指定的一定是一个元组类型 import threading import time g_nums = [1,2] def test1(temp): temp.append(33) pri......
  • 前两天翻文档的时候把 threading 的帮助文档重新翻阅了一遍。发现一个比较有趣的类,threading.Timer,当时感觉比较有意思,就跑到这个类中看了一下。没想到实现的这么简单,而且 threading 中的 Event 类好像就是为...
  • 10 def __init__(self, interval, function, args=None, kwargs=None): # 初始化的时候传参是延迟时间、调用的函数,函数的可变位置参数、函数的可变关键字参数11 Thread.__init__(self) # 调用Thread类初始化配置...
  • Python中使用threading.Timer执行定时任务时,执行任务时一次性的,类似于JS中的setTimeout方法。我们对其在封装,改造成可循环的定时器,类似于JS中setInterval方法的效果。 值得注意的是,threading.Timer是非阻塞...
  • Python threading参数传递方法

    千次阅读 2019-01-23 11:06:00
    今天开启线程传递参数的时候... thread1 = threading.Thread(target=fun, args=[1, 2, 3,]) thread1.start() thread1.join() 要用中括号,不用用大括号,一开始的时候,用的大括号,参数不能组成数组, 在最后的...
  • 全局变量解锁和锁定,1threadingThread,加锁 1、开启两个线程分别执行函数 import time import threading def sing(): for i in range(5): # 子线程 print("----正在唱------") time.sleep(1) def dance(): ...
  • Timer模块简单介绍:from threading import Timert = Timer(interval, function, args=None, kwargs=None)# interval 设置的时间(s)# function 要执行的任务# args,kwargs 传入参数t.start() # 开启定时器t....
  • Thread join()用法 如何通过 Thread 类创建并启动一个线程,当时给读者用如下的程序进行演示: import threading #定义线程要调用的方法,*add可接收多个以非关键字方式传入参数 def action(*add): for arc in ...
  • 1.2.1 继承重写Thread类法创建线程: # -*- coding: utf-8 -*- """ __author__ = 孤寒者 """ import threading import time # 继承threading中的Thread类 class MyThread(threading.Thread): # 线程中所需要的参数 ...
  • 文章目录threading.Lock和threading.RLockthreadiong.Condition threading.Lock和threading.RLock 在threading模块中,定义两种类型的锁:threading.Lock和threading.RLock。...lock = threadin...
  • target=draw_many, args=(acct, 800, 10)).start() # 创建、并启动一个“存款”线程 threading.Thread(name="存款者甲", target=deposit_many, args=(acct, 800, 10)).start() # 创建、并启动一个“存款”线程 ...
  • threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。...threading模块提供的类: Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。threading 模块提供的常用方法: thr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,046
精华内容 6,418
关键字:

threading.thread 传入参数

友情链接: fettiii.rar