线程模块如何在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中使用