2017-04-18 38 views
1

我試圖弄清楚爲什麼多處理不起作用。我一直在掙扎幾天知道..有人可以看看,看看我做錯了什麼。Python多處理池不能正常工作

我沒有得到腳本的任何錯誤。它只是完成,就像它永遠不會運行我在池中定義的函數。我甚至把一個假的函數名稱,看看它是否嘗試運行它的錯誤,甚至沒有達到這一點。有什麼想法嗎??

該腳本適用於不使用多處理時,只是試圖更快地創建腳本。我正在檢查響應代碼的7300個鏈接。先謝謝了。

def check_links(linklist): 
 
    returnList = [] 
 
    for links in linklist: 
 
     r = requests.get(links) 
 
     rc = r.status_code 
 
     strRc = str(rc) 
 
     result = links+' '+strRc 
 
     returnList.append(result) 
 
    yield returnList 
 

 
def main(): 
 
    pool = multiprocessing.Pool(4) 
 
    results = pool.map(check_links, MasterListNoDupes) 
 
    
 
    pool.close() 
 
    pool.join() 
 
    
 
    for result in results: 
 
     print(result) 
 
     
 
if __name__ == ' __main__': 
 
    main()

+0

你爲什麼'yield'如果你有可能會'return'ed?無論如何,你正在構建整個列表。另外,你會得到什麼輸出? – ForceBru

+0

'if __name__ =='__main __':','__main__'中有一個額外的空間。清除它 – Arun

+0

我放回去了。我試圖將其作爲故障排除步驟... –

回答

2

如果你的代碼是完全一樣的,你貼,然後幸運的解決辦法,如果你看一下if聲明向下探底的簡單 - 你必須在字符串中前一個空間,應該讀取'__main__'(它讀取' __main__')。

所以,只要刪除該空間,你可以繼續你的編碼!

我沒有測試你的python-requests部分,因爲我沒有URL列表等,我只是寫了一個虛擬方法,睡了一段隨機時間,它似乎按預期工作。

+0

Thnx爲您提供幫助。我用你的腳本,把我的名單放回去,它工作。謝謝..我已經嘗試了很多方法,過去2天現在它正在工作。謝謝。 –

0

試試這個:

import multiprocessing 
import requests 
def check_links(links): 
    returnList = [] 
    print links 
    r = requests.get(links) 
    rc = r.status_code 
    strRc = str(rc) 
    result = links+' '+strRc 
    return result 

def main(): 
    pool = multiprocessing.Pool(4) 
    a = ['http://stackoverflow.com','https://www.google.co.in'] 
    results = pool.map(check_links, a) 

    pool.close() 
    pool.join() 

    for result in results: 
     print(result) 

if __name__ == '__main__': 
    main()