Python 使用Threading创建多线程 阳光穿透心脏的1/2处 2022-05-16 10:43 165阅读 0赞 # 三种方法创建多线程 # * 创建 Thread 的实例,传给它一个函数。 * 创建 Thread 的实例,传给它一个可调用的类实例。 * 派生 Thread 的子类,并创建子类的实例。 ## 1、创建 Thread 的实例,传给它一个函数 ## 上代码 import threading from time import sleep,ctime loops = [4,2] 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 = list(range(len(loops))) for i in nloops: t = threading.Thread(target=loop, args=(i,loops[i])) 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() 运行结果为: starting at: Mon Aug 20 09:46:14 2018 start loop 0 at: Mon Aug 20 09:46:14 2018 start loop 1 at: Mon Aug 20 09:46:14 2018 loop 1 done at: Mon Aug 20 09:46:16 2018 loop 0 done at: Mon Aug 20 09:46:18 2018 all done at: Mon Aug 20 09:46:18 2018 ## 2、创建 Thread 的实例,传给它一个可调用的类实例 ## 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 def __call__(self): 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 = list(range(len(loops))) for i in nloops: t = threading.Thread( target=ThreadFunc(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() 运行结果为: starting at: Mon Aug 20 09:43:49 2018 start loop 0 at: Mon Aug 20 09:43:49 2018 start loop 1 at: Mon Aug 20 09:43:49 2018 loop 1 done at: Mon Aug 20 09:43:51 2018 loop 0 done at: Mon Aug 20 09:43:53 2018 all done at: Mon Aug 20 09:43:53 2018 ## 3、派生 Thread 的子类,并创建子类的实例 ## import threading from time import sleep,ctime loops = (4,2) class MyThread(threading.Thread): def __init__(self, func, args, name=''): threading.Thread.__init__(self) self.name = name self.func = func self.args = args def run(self): 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 = list(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() 运行结果为: starting at: Mon Aug 20 09:52:43 2018 start loop 0 at: Mon Aug 20 09:52:43 2018 start loop 1 at: Mon Aug 20 09:52:43 2018 loop 1 done at: Mon Aug 20 09:52:45 2018 loop 0 done at: Mon Aug 20 09:52:47 2018 all done at: Mon Aug 20 09:52:47 2018
还没有评论,来说两句吧...