线程模块如何在Python中使用

  

线程模块如何在Python中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


使用螺纹模块创建线程通常有两种方式:

1)使用螺纹模块中线程类的构造器创建线程,即直接对类线程。线程进行实例化,并调用实例化对象的开始方法创建线程;

2)继承线程模块中的线程类创建线程类,即用线程。线程派生出一个新的子类,将新建类实例化,并调用其开始方法创建线程。

构造器方式

调用线程。线程类的如下构造器创建线程:

threading.Thread(=没有,,目标=没有,name=,, arg游戏=(),,kwargs={},,,,守护进程=没有)      组:指定该线程所属的线程组,目前该参数还未实现,为了日后扩展,ThreadGroup 类实现而保留。   目标:用于,run(),方法调用的可调用对象,默认是,没有,表示不需要调用任何方法。   参数:是用于调用目标函数的参数元组,默认是,()。   kwargs:是用于调用目标函数的关键字参数字典,默认是,{}。   守护进程:如果,daemon 不是,没有,线程将被显式的设置为守护模式,不管该线程是否是守护模式,如果是,None (默认值),线程将继承当前线程的守护模式属性。 import 时间   import 线程      def 工作(num):   ,,,print(& # 39;线程名称:& # 39;,threading.current_thread () . getname() & # 39;参数:& # 39;,num, & # 39;开始时间:& # 39;,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))      if  __name__ ==, & # 39; __main__ # 39;:   ,,,print(& # 39;主线程开始时间:& # 39;,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))   ,,,,   ,,,t1 =, threading.Thread(=工作目标,args=(3))   ,,,t2 =, threading.Thread(=工作目标,args=(2))   ,,,t3 =, threading.Thread(=工作目标,args=(1))   ,,,,   ,,,t1.start ()   ,,,t2.start ()   ,,,t3.start ()   ,,,,   ,,,t1.join ()   ,,,t2.join ()   ,,,t3.join ()   ,,,,   ,,,print(& # 39;主线程结束时间:& # 39;,,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))

上述示例中实例化了三个线程类的实例,并向任务函数传递不同的参数,<代码> 开始方法开启线程,<代码>与方法阻塞主线程,等待当前线程运行结束。

继承方式

通过继承的方式创建线程包括如下步骤:1)定义线程类的子类,并重写该类的运行方法;2)创建子线程类的实例,即创建线程对象;3)调用线程对象的开始方法来启动线程。示例如下:

import 时间   import 线程      class  MyThread (threading.Thread):   ,,,,   ,,,def  __init__(自我,num):   ,,,,,,,超级(). __init__ ()   ,,,,,,,self.num =num   ,,,,   ,,,def 运行(自我):   ,,,,,,,印刷(& # 39;线程名称:& # 39;,,threading.current_thread () . getname(), & # 39;参数:& # 39;,,self.num,, & # 39;开始时间:& # 39;,,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))      if  __name__ ==, & # 39; __main__ # 39;:   ,,   ,,,,印刷(& # 39;主线程开始时间:& # 39;,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))   ,,,,   ,,,t1 =, MyThread (3)   ,,,t2 =, MyThread (2)   ,,,t3 =, MyThread (1)   ,,   ,,,,t1.start ()   ,,,t2.start ()   ,,,t3.start ()   ,,,,   ,,,t1.join ()   ,,,t2.join ()   ,,,t3.join ()   ,,,,   ,,,print(& # 39;主线程结束时间:& # 39;,,time.strftime (& # 39; Y % - % - % d  % H: % m: % & # 39;))

上述示例中自定义了线程类MyThread,继承了线程。线程,并重写了__init__方法和运行方法。

守护线程

守护线程(也称后台线程)是在后台运行的,它的任务是为其他线程提供服务,如Python解释器的垃圾回收线程就是守护线程。如果所有的前台线程都死亡了,守护线程也会自动死亡。来看个例子:

#,不设置守护线程   import 线程      def 工作(num):   ,,,for 小姐:拷贝范围(num):   ,,,,,,,印刷(threading.current_thread () .name  +,,,,,, +, str(我))      t =, threading.Thread(目标=工作,,arg游戏=(10),name=& # 39;守护线程& # 39;)   t.start ()      for 小姐:拷贝范围(10):   ,,,通过 #,设置守护线程   import 线程      def 工作(num):   ,,,for 小姐:拷贝范围(num):   ,,,,,,,印刷(threading.current_thread () .name  +,,,,,, +, str(我))      t =, threading.Thread(目标=工作,,arg游戏=(10),name=& # 39;守护线程& # 39;)   t.daemon =,真的   t.start ()      for 小姐:拷贝范围(10):   ,,,通过

线程模块如何在Python中使用