2016-03-17 149 views
1

我有我在linux都嘗試了多重腳本和WindowsPython的多工作在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

你應該調用'.close()'/'.terminate()'在以確保工作人員在完成工作後結束工作,但是,拼圖工作的答案是主要問題。 – ShadowRanger

回答

4

根據multiprocessing documentation - Programming guidelines - Windows

主要模塊的安全進口

確保主模塊可以通過一個新的Python解釋器可以安全地進口,而不會導致意想不到的副作用(例如一開始一個新的進程) 。

...

所以,後衛get_urls1()調用:

...

而是應該通過 if __name__ == '__main__':如下保護程序的「切入點」與if __name__ == '__main__'

if __name__ == '__main__': 
    get_urls1() 
相關問題