我正在運行使用共享主機上的多處理池共享的腳本。我收到以下錯誤:多處理。池內存分配錯誤
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()
我正在運行使用共享主機上的多處理池共享的腳本。我收到以下錯誤:多處理。池內存分配錯誤
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()
好吧,你都爭相推出50多個進程通過您的池使用。現在,這與線程不同,它將啓動50個新的Python進程,幷包含所有的Python模塊和庫。
默認情況下,Pool
將啓動cpu_count()
新進程,通常用於multicpu多核機器。現在,每個新的工作進程默認都會在整個池的工作隊列中持續存在。如果我將使用一個專用的VPS實例,我將採取謹慎措施,在我的池中免費創建工作進程。在你的情況下,你正在使用共享主機,在這方面,內存限制會更大,顯示你在上面看到的錯誤信息。
如果您想使用此功能,請將您的部署從共享主機更改爲專用vps /雲實例。
感謝您的回覆,或將進程數量減少到2或3? – Volatil3
減少到2或3 ...並嘗試在此之後逐一增加,直到錯誤再次啓動。如果2失敗,那麼你的共享主機限制了所有這些,多進程python將無法工作,你將需要遷移到專用的vps。 –
這聽起來像是你的內存不足。我不知道我們能爲此提供多少幫助。也許可以嘗試讓你的池擁有更少的進程(通常沒有太多的好處,比你的CPU有更多的內核)。 – Blckknght
@Blckknght託管服務提供商的某種限制,因爲我的Mac本地沒有這樣的問題 – Volatil3