1
1
# encoding: utf-8
2
2
__author__ = 'zhanghe'
3
3
4
- from multiprocessing import Pool
4
+ # from multiprocessing import Pool
5
+ from multiprocessing .dummy import Pool
6
+ import gevent
5
7
import os
6
8
import time
7
9
import random
10
+ from tools import time_log
11
+ from gevent import monkey
12
+ monkey .patch_all ()
8
13
9
14
10
15
def long_time_task (name ):
@@ -15,12 +20,14 @@ def long_time_task(name):
15
20
"""
16
21
print 'Run task %s (%s)...' % (name , os .getpid ())
17
22
start = time .time ()
18
- time .sleep (random .random () * 3 )
23
+ # time.sleep(random.random() * 3)
24
+ time .sleep (0.3 )
19
25
end = time .time ()
20
26
print 'Task %s runs %0.2f seconds.' % (name , (end - start ))
21
27
22
28
23
- if __name__ == '__main__' :
29
+ @time_log .time_log
30
+ def run ():
24
31
print 'Parent process %s.' % os .getpid ()
25
32
p = Pool ()
26
33
for i in range (9 ):
@@ -31,6 +38,15 @@ def long_time_task(name):
31
38
print 'All sub processes done.'
32
39
33
40
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
+
34
50
# 这是一个多进程的例子,同时运行的进程数与机器的核心数是对应的
35
51
# 根据任务池同时运行的进程数也可以看出当前cpu的核心数,运行结果:
36
52
# 可以看出进程池子最多有4个进程
@@ -76,3 +92,114 @@ def long_time_task(name):
76
92
# cpu cores : 4
77
93
# cpuid level : 13
78
94
# 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