Python多处理工作在Linux中,但不在Windows中

时间:2016-03-17 11:52:35

标签: python linux windows multiprocessing

我有一个多处理脚本,我在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和脚本甚至没有结束(但如果我删除多处理脚本工作)

我应该如何解决多处理问题?

1 个答案:

答案 0 :(得分:5)

根据multiprocessing documentation - Programming guidelines - Windows

  

安全导入主模块

     

确保新的Python解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程)。

     

...

     

相反,应该通过使用来保护程序的“入口点”   if __name__ == '__main__':如下:

     

...

因此,使用if __name__ == '__main__'保护get_urls1()调用:

if __name__ == '__main__':
    get_urls1()