-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathch20_10.py
More file actions
61 lines (39 loc) · 1.56 KB
/
ch20_10.py
File metadata and controls
61 lines (39 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 进程池:进程数规定上限值,进程数达到上限值,新进程会等待,直到有进程结束;
# pool = multiprocessing.Pool(processes=3)
# pool type: <class 'multiprocessing.pool.Pool'>
#
# 线程池:线程数规定上限值,线程数达到上限值,新线程会等待,直到有线程结束;
# pool = multiprocessing.dummy.Pool(processes=3)
# pool type: <class 'multiprocessing.pool.ThreadPool'>
#
# map函数:是对.apply_async(f, args)方法的封装,用于调用同一函数的情况
import multiprocessing
import time
def process_func(process_id):
print('process id %d start' % process_id)
time.sleep(3)
print('process id %d end' % process_id)
def main():
pool = multiprocessing.Pool(processes=3) # pool是一个类,处于run状态
# pool.map(process_func, range(10)) # 调用同一个函数的情况,才能用map函数
for item in range(10):
pool.apply_async(process_func, args=(item, )) # .apply_async启动进程,阻塞for循环
pool.close()
pool.join()
if __name__ == '__main__':
main()
# import multiprocessing.dummy
# import time
# def process_func(process_id):
# print('process id %d start' % process_id)
# time.sleep(3)
# print('process id %d end' % process_id)
# def main():
# pool = multiprocessing.dummy.Pool(processes=3)
# # pool.map(process_func, range(10))
# for item in range(10):
# pool.apply_async(process_func, args=(item, ))
# pool.close()
# pool.join()
# if __name__ == '__main__':
# main()