单线程、多线程、协程、多进程对比_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任务相对较多的情况下,协程>多线程>多进程>单线程

posted on 2020-03-08 17:15  陈小赞  阅读(382)  评论(0编辑  收藏  举报

导航