11# encoding: utf-8
22__author__ = 'zhanghe'
33
4- from multiprocessing import Pool
4+ # from multiprocessing import Pool
5+ from multiprocessing .dummy import Pool
6+ import gevent
57import os
68import time
79import random
10+ from tools import time_log
11+ from gevent import monkey
12+ monkey .patch_all ()
813
914
1015def long_time_task (name ):
@@ -15,12 +20,14 @@ def long_time_task(name):
1520 """
1621 print 'Run task %s (%s)...' % (name , os .getpid ())
1722 start = time .time ()
18- time .sleep (random .random () * 3 )
23+ # time.sleep(random.random() * 3)
24+ time .sleep (0.3 )
1925 end = time .time ()
2026 print 'Task %s runs %0.2f seconds.' % (name , (end - start ))
2127
2228
23- if __name__ == '__main__' :
29+ @time_log .time_log
30+ def run ():
2431 print 'Parent process %s.' % os .getpid ()
2532 p = Pool ()
2633 for i in range (9 ):
@@ -31,6 +38,15 @@ def long_time_task(name):
3138 print 'All sub processes done.'
3239
3340
41+ @time_log .time_log
42+ def run_gevent ():
43+ threads = [gevent .spawn (long_time_task , i ) for i in range (9 )]
44+ gevent .joinall (threads )
45+
46+ if __name__ == '__main__' :
47+ # run()
48+ run_gevent ()
49+
3450# 这是一个多进程的例子,同时运行的进程数与机器的核心数是对应的
3551# 根据任务池同时运行的进程数也可以看出当前cpu的核心数,运行结果:
3652# 可以看出进程池子最多有4个进程
@@ -76,3 +92,114 @@ def long_time_task(name):
7692# cpu cores : 4
7793# cpuid level : 13
7894# zhanghe@ubuntu:~$
95+
96+
97+ # from multiprocessing import Pool
98+ # time.sleep(0.3)
99+ # 方法run开始时间:Thu Apr 30 00:48:04 2015
100+ # Parent process 17113.
101+ # Waiting for all sub processes done...
102+ # Run task 1 (17115)...
103+ # Run task 0 (17114)...
104+ # Task 1 runs 0.30 seconds.
105+ # Run task 2 (17115)...
106+ # Task 0 runs 0.30 seconds.
107+ # Run task 3 (17114)...
108+ # Task 2 runs 0.30 seconds.
109+ # Run task 4 (17115)...
110+ # Task 3 runs 0.30 seconds.
111+ # Run task 5 (17114)...
112+ # Task 4 runs 0.30 seconds.
113+ # Run task 6 (17115)...
114+ # Task 5 runs 0.30 seconds.
115+ # Run task 7 (17114)...
116+ # Task 6 runs 0.30 seconds.
117+ # Run task 8 (17115)...
118+ # Task 7 runs 0.30 seconds.
119+ # Task 8 runs 0.30 seconds.
120+ # All sub processes done.
121+ # 方法run结束时间:Thu Apr 30 00:48:05 2015
122+ # 方法run运行时间:1.72S
123+
124+
125+ # from multiprocessing.dummy import Pool
126+ # time.sleep(0.3)
127+ # 方法run开始时间:Thu Apr 30 00:51:27 2015
128+ # Parent process 17244.
129+ # Waiting for all sub processes done...
130+ # Run task 0 (17244)...
131+ # Run task 1 (17244)...
132+ # Task 0 runs 0.30 seconds.
133+ # Task 1 runs 0.30 seconds.Run task 2 (17244)...
134+ #
135+ # Run task 3 (17244)...
136+ # Task 2 runs 0.30 seconds.Task 3 runs 0.30 seconds.
137+ # Run task 4 (17244)...
138+ #
139+ # Run task 5 (17244)...
140+ # Task 4 runs 0.30 seconds.
141+ # Task 5 runs 0.30 seconds.Run task 6 (17244)...
142+ #
143+ # Run task 7 (17244)...
144+ # Task 6 runs 0.30 seconds.
145+ # Run task 8 (17244)...
146+ # Task 7 runs 0.30 seconds.
147+ # Task 8 runs 0.30 seconds.
148+ # All sub processes done.
149+ # 方法run结束时间:Thu Apr 30 00:51:29 2015
150+ # 方法run运行时间:1.54S
151+
152+
153+ # import gevent
154+ # time.sleep(0.3)
155+ # 方法run_gevent开始时间:Thu Apr 30 01:13:52 2015
156+ # Run task 0 (17964)...
157+ # Task 0 runs 0.30 seconds.
158+ # Run task 1 (17964)...
159+ # Task 1 runs 0.30 seconds.
160+ # Run task 2 (17964)...
161+ # Task 2 runs 0.30 seconds.
162+ # Run task 3 (17964)...
163+ # Task 3 runs 0.30 seconds.
164+ # Run task 4 (17964)...
165+ # Task 4 runs 0.30 seconds.
166+ # Run task 5 (17964)...
167+ # Task 5 runs 0.30 seconds.
168+ # Run task 6 (17964)...
169+ # Task 6 runs 0.30 seconds.
170+ # Run task 7 (17964)...
171+ # Task 7 runs 0.30 seconds.
172+ # Run task 8 (17964)...
173+ # Task 8 runs 0.30 seconds.
174+ # 方法run_gevent结束时间:Thu Apr 30 01:13:55 2015
175+ # 方法run_gevent运行时间:2.74S
176+
177+
178+ # import gevent
179+ # time.sleep(0.3)
180+ # from gevent import monkey
181+ # monkey.patch_all()
182+ # 方法run_gevent开始时间:Thu Apr 30 01:17:05 2015
183+ # Run task 0 (18038)...
184+ # Run task 1 (18038)...
185+ # Run task 2 (18038)...
186+ # Run task 3 (18038)...
187+ # Run task 4 (18038)...
188+ # Run task 5 (18038)...
189+ # Run task 6 (18038)...
190+ # Run task 7 (18038)...
191+ # Run task 8 (18038)...
192+ # Task 0 runs 0.30 seconds.
193+ # Task 1 runs 0.30 seconds.
194+ # Task 2 runs 0.30 seconds.
195+ # Task 3 runs 0.30 seconds.
196+ # Task 4 runs 0.30 seconds.
197+ # Task 5 runs 0.30 seconds.
198+ # Task 6 runs 0.30 seconds.
199+ # Task 7 runs 0.30 seconds.
200+ # Task 8 runs 0.30 seconds.
201+ # 方法run_gevent结束时间:Thu Apr 30 01:17:05 2015
202+ # 方法run_gevent运行时间:0.32S
203+
204+ # 结果可以看出使用multiprocessing.dummy模块比multiprocessing速度略有提升
205+ # 使用打补丁后的gevent,效率最快
0 commit comments