Python多进程池OSError:打开的文件太多

3

我需要检查do_something()方法在两个包含三万个元素的列表中总共花费了多少时间。以下是我的代码:

def run(a, b, data):
    p = datetime.datetime.now()
    val = do_something(a, b, data[0], data[1])
    q = datetime.datetime.now()
    res = (q - p).microseconds
    return res 

接下来,我使用以下代码调用:

func = functools.partial(run, a, b)

x = np.linspace(500, 1000, 30000).tolist()
y = np.linspace(20, 500, 30000).tolist()

data = zip(x, y)

with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
    d = pool.map(func, data)
res = sum(d)

每次运行此代码时,都会出现 "OSError: [Errno 24] Too many open files" 的错误。我该如何解决这个问题?
1个回答

4

你可以使用ulimit -u 2048来提高进程限制。

使用ulimit -a检查当前限制。


当前限制大约为325k。尝试将其提高到1000万,但仍在相同的时间出现相同的错误。 - Somnath Rakshit
1
使用timeout或gc.collect()确保进程被垃圾回收。看起来它正在保存proc文件描述符,导致溢出。在map之后还要使用pool.join() - smanna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接