2017-04-01 82 views
-1

我正在運行使用共享主機上的多處理池共享的腳本。我收到以下錯誤:多處理。池內存分配錯誤

Errno 12] Cannot allocate memory 
(<type 'exceptions.OSError'>, 

下面是我的代碼:

with closing(Pool(processes=50)) as pool: 
csv_items = pool.map(get_stuff, list_ids) 
pool.terminate() 
pool.join() 
+3

這聽起來像是你的內存不足。我不知道我們能爲此提供多少幫助。也許可以嘗試讓你的池擁有更少的進程(通常沒有太多的好處,比你的CPU有更多的內核)。 – Blckknght

+0

@Blckknght託管服務提供商的某種限制,因爲我的Mac本地沒有這樣的問題 – Volatil3

回答

1

好吧,你都爭相推出50多個進程通過您的池使用。現在,這與線程不同,它將啓動50個新的Python進程,幷包含所有的Python模塊和庫。

默認情況下,Pool將啓動cpu_count()新進程,通常用於multicpu多核機器。現在,每個新的工作進程默認都會在整個池的工作隊列中持續存在。如果我將使用一個專用的VPS實例,我將採取謹慎措施,在我的池中免費創建工作進程。在你的情況下,你正在使用共享主機,在這方面,內存限制會更大,顯示你在上面看到的錯誤信息。

如果您想使用此功能,請將您的部署從共享主機更改爲專用vps /雲實例。

+1

感謝您的回覆,或將進程數量減少到2或3? – Volatil3

+1

減少到2或3 ...並嘗試在此之後逐一增加,直到錯誤再次啓動。如果2失敗,那麼你的共享主機限制了所有這些,多進程python將無法工作,你將需要遷移到專用的vps。 –