gpt4 book ai didi

Python3并发填充字典

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:18 25 4
gpt4 key购买 nike

我想循环填充字典。循环中的迭代是相互独立的。我想在具有数千个处理器的集群上执行此操作。这是我尝试和需要做的事情的简化版本。

import multiprocessing

class Worker(multiprocessing.Process):
def setName(self,name):
self.name=name
def run(self):
print ('In %s' % self.name)
return

if __name__ == '__main__':
jobs = []
names=dict()
for i in range(10000):
p = Worker()
p.setName(str(i))
names[str(i)]=i
jobs.append(p)
p.start()
for j in jobs:
j.join()

我在自己的电脑上用 python3 试过这个,收到以下错误:

    ..
In 249
Traceback (most recent call last):
File "test.py", line 16, in <module>
p.start()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/process.py", line 105, in start
In 250
self._popen = self._Popen(self)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/context.py", line 212, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/context.py", line 267, in _Popen
return Popen(process_obj)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/popen_fork.py", line 20, in __init__
self._launch(process_obj)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/multiprocessing/popen_fork.py", line 66, in _launch
parent_r, child_w = os.pipe()
OSError: [Errno 24] Too many open files

有没有更好的方法来做到这一点?

最佳答案

multiprocessing 通过管道与其子进程对话。每个子进程需要两个打开的文件描述符,一个用于读取,一个用于写入。如果你启动 10000 个工作人员,你将结束打开 20000 个文件描述符,这超过了 OS X 的默认限制(你的路径表明你正在使用)。

您可以通过提高限制来解决此问题。参见 https://superuser.com/questions/433746/is-there-a-fix-for-the-too-many-open-files-in-system-error-on-os-x-10-7-1有关详细信息 - 基本上,这相当于设置两个 sysctl 旋钮并提高 shell 的 ulimit 设置。

关于Python3并发填充字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com