我有一个多处理脚本,我在linux和windows
中都尝试过在linux中它工作正常但在Windows中脚本运行一些随机的未知结果并且脚本甚至没有结束
脚本
from multiprocessing.pool import Pool
def get_urls1():
res = [1,2,3,4,5]
nprocs = 20 # nprocs is the number of processes to run
ParsePool = Pool(nprocs)
#ParsePool.map(btl_test,url)
ParsedURLS = ParsePool.map(extractData,res)
def extractData(r):
print r
get_urls1()
Linux输出
1
3
2
5
4
但是当我在Windows中运行相同的脚本时,它并没有给出确切的结果,因为linux和脚本甚至没有结束(但如果我删除多处理脚本工作)
我应该如何解决多处理问题?
答案 0 :(得分:5)
根据multiprocessing
documentation - Programming guidelines - Windows
安全导入主模块
确保新的Python解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程)。
...
相反,应该通过使用来保护程序的“入口点”
if __name__ == '__main__':
如下:...
因此,使用if __name__ == '__main__'
保护get_urls1()调用:
if __name__ == '__main__':
get_urls1()