单线程、多线程、协程、多进程对比_python
一、同时执行10个任务的执行快慢
1 from multiprocessing import freeze_support 2 freeze_support() 3 import gevent 4 import time 5 import threading 6 import multiprocessing 7 8 start_time=time.time() 9 def task(pid): 10 """ 11 Some non-deterministic task 12 """ 13 gevent.sleep(1) 14 print('Task %s done' % pid) 15 16 if __name__ == '__main__': #多线程不加这个要报错,还有from multiprocessing import freeze_support 17 #单线程 18 for i in range(1, 10): 19 task(i) 20 single_time=time.time() 21 22 23 #协程 24 g_list=[] 25 for i in range(1,10): 26 g=gevent.spawn(task,i) 27 g_list.append(g) 28 for i in g_list: 29 i.join() 30 gevent_time=time.time() 31 32 33 #多线程 34 t_list=[] 35 for i in range(1,10): 36 t=threading.Thread(target=task,args=(i,)) 37 t.start() 38 t_list.append(t) 39 for i in t_list: 40 i.join() 41 thread_time=time.time() 42 43 #多进程 44 45 #mul_start=time.time() 46 p_list=[] 47 for i in range(1,10): 48 p=multiprocessing.Process(target=task,args=(i,)) 49 p.start() 50 p_list.append(p) 51 for i in p_list: 52 i.join() 53 mulprocess_time=time.time() 54 55 56 print( 57 ''' 58 单线程执行时间:%s 59 协程执行时间:%s 60 多线程执行时间:%s 61 多进程执行时间:%s 62 '''%(single_time-start_time,gevent_time-single_time,thread_time-gevent_time,mulprocess_time-thread_time)) 63
最终执行结果:
在这个IO任务相对较多的情况下,协程>多线程>多进程>单线程