Python中的threading模块是什么

threading提供了一个比thread模块更高层次的API来提供线程并发性。这些线程并发运行并共享内存。
以下是threading模块的具体用法:
1.使用Thread时,目标函数可以实例化一个Thread对象,每个Thread对象代表一个线程,可以通过start()开始运行。
这里对多线程并发的使用和不适用的多线程并发进行了比较:
一是不使用多线程操作:
代码如下:
#!/usr/bin/python #compareformultithreads importtime defworker(): print"worker" time.sleep(1) return if__name__=="__main__": foriinxrange(5): worker()
结果如下:
以下是多线程并发的操作:
代码如下:
#!/usr/bin/python importthreading importtime defworker(): print"worker" time.sleep(1) return foriinxrange(5): t=threading.Thread(target=worker) t.start()
可以清楚地看出,多线程并发操作的使用时间要短得多。
二、threading.activeCount()使用此方法返回当前过程中线程的数量。返回的数量包括主线程。
代码如下:
#!/usr/bin/python #current'snumberofthreads importthreading importtime defworker(): print"test" time.sleep(1) foriinxrange(5): t=threading.Thread(target=worker) t.start() print"currenthas%dthreads"%(threading.activeCount()-1)
三、threading.enumerate()使用此方法返回当前运行中的Thread对象列表。
相关推荐:Python视频教程
代码如下:
#!/usr/bin/python #testthevariablethreading.enumerate() importthreading importtime defworker(): print"test" time.sleep(2) threads=[] foriinxrange(5): t=threading.Thread(target=worker) threads.append(t) t.start() foriteminthreading.enumerate(): printitem print foriteminthreads: printitem
四、threading.setDaemon()使用。设置后台流程。
代码如下:
#!/usr/bin/python #createadaemon importthreading importtime defworker(): time.sleep(3) print"worker" t=threading.Thread(target=worker) t.setDaemon(True) t.start() print"haha"
可见worker()方法中的打印操作没有显示出来,说明已经成为后台过程。
threading.Thread
Thread 它是threading模块中最重要的类别之一,可以用来创建线程。创建线程有两种方法:一种是继承thread类,重写其run方法;另一种是创建threading.Thread对象在其初始化函数(__init__)将可调用对象作为参数传入。以下是一些例子。让我们先来看看继承threading。.Thread类创建线程的例子:
#coding=gbk 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
在代码中,我们创建了一个Counter类,它继承了threading.Thread。初始化函数接收两个参数,一个是锁定对象,另一个是线程的名称。在counter中,重写了从父亲那里继承的run方法,run方法逐一增加了1万个全局变量。在下一个代码中,创建了五个counter对象,分别调用其start方法。最后打印结果。这里有一个解释run方法 和start方法: 它们都是从Thread继承下来的,run()在线程打开后执行方法,可以将相关逻辑写入run方法(通常称run方法为活动)[Activity]。);start()启动线程的方法。
