我有一个代码:
import multiprocessing as mp
import time
sym=[1,2,3,4,5,6,7,8,9,10]
print "AAAAAAAAAAAAAAAAAAAAAAAAAAA"
def test(c):
print c
gjd=0
if __name__ == '__main__':
if float(gjd)<((time.time()/60)):
gjd=float(int(time.time() / 60) + 1)
zxc=time.time()
p = mp.Pool(processes=7)
for t in sym:
p.apply_async(test, args=(t,))
time.sleep(0.6)
p.close()
p.join()
print '----------------------------',time.time()-zxc,'----------------------------'
但是,我并不真正理解为什么行
print "AAAAAAAAAAAAAAAAAAAAAAAAAAA"
在
定义的工人数量之前执行了7次 p = mp.Pool(processes=7)
我的代码输出是:
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
1
2
3
4
5
6
7
8
9
10
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
---------------------------- 0.858999967575 ----------------------------
Process finished with exit code 0
如何防止在多处理池调用的函数之外执行行?
答案 0 :(得分:0)
multiprocessing
导入模块,因此为什么每个杂散(=函数,类或if __name__ == '__main__'
之外的代码)都会执行。
要解决此问题,只需将所有内容移至函数或if __name__ == '__main__'
内。
请参阅docs上的安全导入主模块:
安全导入主模块
确保新模块可以安全地导入主模块 口译员没有引起意外的副作用(这样的开始a 新进程)。