[英]Too many open files error with python multiprocessing
我在使用多處理(下文稱為mp
)的 python(v3.7)腳本時遇到了多個問題。 其中之一是我的計算以“OSError: [Errno 24] Too many open files”結束。 我的腳本和模塊很復雜,所以我將問題分解為以下代碼:
def worker(n):
time.sleep(1)
n = 2000
procs = [mp.Process(target=worker, args=(i,)) for i in range(n)]
nprocs = 40
i = 0
while i<n:
if (len(mp.active_children())<=nprocs):
print('Starting proc {:d}'.format(i))
procs[i].start()
i += 1
else:
time.sleep(1)
[p.join() for p in procs]
當執行了大約 ~ 1020 個進程時,此代碼將失敗。 我一直以類似的方式使用多處理而沒有遇到這個問題,我在大約 120 CPU 的服務器上運行它。 最近我從 Python 2.7 切換到 3.7,我不知道這是否會成為問題。
這是完整的跟蹤:
Traceback (most recent call last):
File "test_toomanyopen.py", line 18, in <module>
procs[i].start()
File "/p/jqueryrel/local_install/conda_envs/trois/lib/python3.7/multiprocessing/process.py", line 112, in start
self._popen = self._Popen(self)
File "/p/jqueryrel/local_install/conda_envs/trois/lib/python3.7/multiprocessing/context.py", line 223, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "/p/jqueryrel/local_install/conda_envs/trois/lib/python3.7/multiprocessing/context.py", line 277, in _Popen
return Popen(process_obj)
File "/p/jqueryrel/local_install/conda_envs/trois/lib/python3.7/multiprocessing/popen_fork.py", line 20, in __init__
self._launch(process_obj)
File "/p/jqueryrel/local_install/conda_envs/trois/lib/python3.7/multiprocessing/popen_fork.py", line 69, in _launch
parent_r, child_w = os.pipe()
OSError: [Errno 24] Too many open files
我在這里看到了類似的問題,但我不知道如何解決這個問題。
謝謝
要將評論放入答案中,有幾個選項可以解決此問題:
/etc/security/limits.conf
。 例如看這里。Pool
可能有助於重構您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.