我使用this answer是为了在Linux机器上用python语言运行多处理的并行命令。
我的代码做了一些类似的事情:
import multiprocessing
import logging
def cycle(offset):
# Do stuff
def run():
for nprocess in process_per_cycle:
logger.info("Start cycle with %d processes", nprocess)
offsets = list(range(nprocess))
pool = multiprocessing.Pool(nprocess)
pool.map(cycle, offsets)
但是我得到了这个错误:OSError: [Errno 24] Too many open files
因此,代码打开了太多的文件描述符,即:它启动了太多的进程,但没有终止它们。
我修复了这个问题,用下面这几行替换了最后两行:
with multiprocessing.Pool(nprocess) as pool:
pool.map(cycle, offsets)
但我并不确切地知道为什么这些行可以修复它。
该with
下面发生了什么
发布于 2017-08-14 08:21:04
它是上下文管理器。使用with可确保正确打开和关闭文件。要详细理解这一点,我推荐这篇文章https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/
发布于 2020-07-18 05:20:56
当你使用numpy.load时也会发生这种情况,请确保也关闭这些文件,或者避免使用它而使用pickle或torch.save torch.load等。
发布于 2021-11-29 06:21:40
我已经终止并关闭了池,但是文件描述符的数量有限制,我将我的ulimit从1024
更改为4096
,并且它起作用了。具体操作步骤如下:
检查:
ulimit -n
我把它更新到4096,它起作用了。
ulimit -n 4096
https://stackoverflow.com/questions/45665991
复制相似问题