Python中threading,python3 threading模块
线程提供了比线程模块更高级别的API来提供线程的并发性。这些线程并发运行并共享内存。
下面来看threading模块的具体用法:
一、使用Thread,目标函数可以实例化一个Thread对象,每个Thread对象代表一个线程,可以通过start()方法启动。
这里对使用多线程并发和不应用多线程并发进行了比较:
第一个是没有多线程的操作:
代码如下:
#!/usr/bin/python
# compareformultithreads
进口时间
defworker():
打印“工人”
时间.睡眠(1)
返回
if__name__==__main__:
传真号码(5):
worker()的执行结果如下:
下面是使用多线程并发的操作:
代码如下:
#!/usr/bin/python
导入线程
进口时间
defworker():
打印“工人”
时间.睡眠(1)
返回
传真号码(5):
t=螺纹。线程(目标=工作线程)
T.start()可以清楚地看到,使用多线程并发的操作花费的时间要少得多。
二。threading.activeCount()的使用。此方法返回当前进程中的线程数。返回的数字包含主线程。
代码如下:
#!/usr/bin/python
#当前线程数
导入线程
进口时间
defworker():
打印“测试”
时间.睡眠(1)
传真号码(5):
t=螺纹。线程(目标=工作线程)
启动()
print current has % d threads“%(threading . active count()-1)III。threading.enumerate()的使用。该方法返回当前运行的线程对象列表。
相关建议: 《Python视频教程》
代码如下:
#!/usr/bin/python
# testthevariablethreading . enumerate()
导入线程
进口时间
defworker():
打印“测试”
时间.睡眠(2)
线程=[]
fori
nbsp;inxrange(5):
t=threading.Thread(target=worker)
threads.append(t)
t.start()
foriteminthreading.enumerate():
printitem
foriteminthreads:
printitem四、threading.setDaemon()的使用。设置后台进程。
代码如下:
#!/usr/bin/python可以看出worker()方法中的打印操作并没有显示出来,说明已经成为后台进程。#createadaemon
importthreading
importtime
defworker():
time.sleep(3)
print"worker"
t=threading.Thread(target=worker)
t.setDaemon(True)
t.start()
print"haha"
threading.Thread
Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承threading.Thread类来创建线程的例子:
#coding=gbk在代码中,我们创建了一个Counter类,它继承了threading.Thread。初始化函数接收两个参数,一个是锁对象,另一个是线程的名称。在Counter中,重写了从父类继承的run方法,run方法将一个全局变量逐一的增加10000。在接下来的代码中,创建了五个Counter对象,分别调用其start方法。最后打印结果。这里要说明一下run方法 和start方法: 它们都是从Thread继承而来的,run()方法将在线程开启后执行,可以把相关的逻辑写到run方法中(通常把run方法称为活动[Activity]。);start()方法用于启动线程。importthreading,time,random
count=0
classCounter(threading.Thread):
def__init__(self,lock,threadName):
'''@summary:初始化对象。
@paramlock:琐对象。
@paramthreadName:线程名称。
'''
super(Counter,self).__init__(name=threadName)
#注意:一定要显式的调用父类的初始
化函数。
self.lock=lock
defrun(self):
'''@summary:重写父类run方法,在线程启动后执行该方法内的代码。
'''
globalcount
self.lock.acquire()
foriinxrange(10000):
count=count+1
self.lock.release()
lock=threading.Lock()
foriinrange(5):
Counter(lock,"thread-"+str(i)).start()
time.sleep(2)
#确保线程都执行完毕
printcount
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。