Python之多线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之多线程相关的知识,希望对你有一定的参考价值。
一、多线程
1、顺序执行单个线程,注意要顺序执行的话,需要用join。
1 #coding=utf-8 2 3 from threading import Thread 4 import time 5 6 def my_counter(): 7 i = 0 8 for _ in range(100000000): 9 i = i + 1 10 return True 11 12 def main(): 13 thread_array = {} 14 start_time = time.time() 15 for tid in range(2): 16 t = Thread(target=my_counter) 17 t.start() 18 # join阻塞下个线程,除非当前线程执行完毕 19 t.join() 20 end_time = time.time() 21 print("Total time: {}".format(end_time - start_time)) 22 23 if __name__ == ‘__main__‘:
执行结果:
2、同时执行两个并发线程
1 #coding=utf-8 2 3 from threading import Thread 4 import time 5 6 def prn_obj(obj): 7 return ‘\\n‘.join([‘%s:%s‘ % item for item in obj.__dict__.items()]) 8 9 def my_counter(): 10 i = 0 11 for _ in range(100000000): 12 i = i + 1 13 return True 14 15 def main(): 16 thread_array = {} 17 start_time = time.time() 18 for tid in range(2): 19 t = Thread(target=my_counter) 20 t.start() 21 thread_array[tid] = t 22 for i in range(2): 23 thread_array[i].join() 24 # print("thread type: {}".format(prn_obj(thread_array[i]))) 25 print("thread type: {}".format(thread_array[i].name)) 26 end_time = time.time() 27 print("Total time: {}".format(end_time - start_time)) 28 29 if __name__ == ‘__main__‘: 30 main()
下面是用了打印所有属性的方法,这个方法代码中注释了,可重复利用的代码块
二、多进程
1、multiprocessing
multiprocessing是跨平台版本的多进程模块,它提供了一个Process类来代表一个进程对象,下面是示例嗲吗
import os if __name__==‘__main__‘: print ‘Process (%s) start...‘ % os.getpid() pid = os.fork() print pid if pid==0: print ‘I am child process (%s) and my parent is %s.‘ % (os.getpid(), os.getppid()) else: print ‘I (%s) just created a child process (%s).‘ % (os.getpid(), pid)
这个程序如果用单进程写则需要执行10秒以上的时间,而用多进程则启动10个进程并行执行,只需要用1秒多的时间。
以上是关于Python之多线程的主要内容,如果未能解决你的问题,请参考以下文章