发布时间:2019-09-21 11:10:47编辑:auto阅读(1597)
1. 第一种方式: 创建一个threading.Thread()的实例,给它一个函数。
import threading
from time import sleep, ctime loops = [4, 2] def loop(nloop, nsec): print '\nstart loop:', nloop, 'at:', ctime() sleep(nsec) print '\nloop', nloop, 'done at:', ctime() def main(): print '\nstarting at:\n', ctime() threads = [] nloops = range(len(loops)) #create the threads using threading for i in nloops: t = threading.Thread(target=loop, args=(i,loops[i])) threads.append(t) #start threads for i in nloops: threads[i].start() #wait for all for i in nloops: threads[i].join() #block print '\nall Done at:', ctime() if __name__ == '__main__': main()
/-----------------------------------------------------------------------------------------------------------------------------------------------------
2. 第二种方式: 创建一个threading.Thread的实例,传给它一个可调用类对象,类中使用__call__()函数调用函数
import threading from time import sleep, ctime loops = [4,2] class ThreadFunc(object): def __init__(self, func, args, name=''): self.name = name self.func = func self.args = args #when you create a new thread, Thread instance will invoke our ThreadFunc # instance, and at that time, it will call the function __call__() # Hence, we have a tuple arguments , so we use the self.res def __call__(self): self.res = self.func(*self.args) #invoke the func def loop(nloop, nsec): print '\nstart loop:', nloop, 'at:', ctime() sleep(nsec) print '\nloop', nloop, 'done at:', ctime() def main(): print 'start at:', ctime() threads = [] #list nloops = range(len(loops)) #crate all threads for i in nloops: t = threading.Thread(target=ThreadFunc(loop, (i, loops[i]),loop.__name__)) threads.append(t) #start all threads for i in nloops: threads[i].start() for i in nloops: threads[i].join() print 'all Done at:', ctime() if __name__ == '__main__': main()
/-----------------------------------------------------------------------------------
3. 第三种方式: 派生一个threading.Thread出一个子类,创建这个子类的实例,使用run调用函数 import threading from time import sleep, ctime loops = (4,2) class MyThread(threading.Thread): def __init__(self, func, args, name=''): threading.Thread.__init__(self) #base class func self.name = name self.func = func self.args = args # in the other way, use __call__() def run(self): apply(self.func,self.args) def loop(nloop, nsec): print 'start loop', nloop, 'at:', ctime() sleep(nsec) print 'loop', nloop, 'done at:', ctime() def main(): print 'starting at:',ctime() threads = [] nloops = range(len(loops)) for i in nloops: t = MyThread(loop, (i,loops[i]), loop.__name__) threads.append(t) for i in nloops: threads[i].start() for i in nloops: threads[i].join() print 'all Done at:', ctime() if __name__ == '__main__': main()
上一篇: Dynamips和Vmware完成CCV
下一篇: awk题目3
47837
46379
37264
34722
29306
25964
24893
19943
19534
18014
5785°
6406°
5921°
5957°
7060°
5904°
5936°
6432°
6400°
7772°