python multiprocessing manager list error: [Errno 2] No such file or directory
python multiprocessing manager list error: [Errno 2] No such file or directory
我在 python 写了一个多处理程序。我使用 multiprocessing.Manager().list()
在子流程中共享列表。首先,我在主进程中添加了一些任务。然后,启动一些子进程来执行共享列表中的任务,子进程也将任务添加到共享列表中。但我得到一个例外如下:
Traceback (most recent call last):
File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "gen_friendship.py", line 255, in worker
if tmpu in nodes:
File "<string>", line 2, in __contains__
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 722, in _callmethod
self._connect()
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 709, in _connect
conn = self._Client(self._token.address, authkey=self._authkey)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 143, in Client
c = SocketClient(address)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 263, in SocketClient
s.connect(address)
File "<string>", line 1, in connect
error: [Errno 2] No such file or directory
我找到了一些关于如何在 python 多处理中使用共享列表的信息,比如 this。但仍有一些例外。我不知道异常的含义。普通列表和 manager.list 有什么区别?
代码如下:
nodes = multiprocessing.Manager().list()
lock = multiprocessing.Lock()
AMOUNT_OF_PROCESS = 10
def worker():
lock.acquire()
nodes.append(node)
lock.release()
if __name__ == "__main__":
for i in range(i):
nodes.append({"name":"username", "group":1})
processes = [None for i in range(AMOUNT_OF_PROCESS)]
for i in range(AMOUNT_OF_PROCESS):
processes[i] = multiprocessing.Process(taget=worker, args=())
processes[i].start()
问题是您的主进程在您启动所有工作进程后立即退出,这会关闭您的 Manager
。当您的 Manager
关闭时,children 的 none 可以使用您传递给它们的共享列表。您可以通过使用 join
等待所有 children 完成来修复它。只需确保在调用 join
:
之前你确实 start
所有进程
for i in range(AMOUNT_OF_PROCESS):
processes[i] = multiprocessing.Process(target=worker, args=())
processes[i].start()
for process in processes:
process.join()
我在 python 写了一个多处理程序。我使用 multiprocessing.Manager().list()
在子流程中共享列表。首先,我在主进程中添加了一些任务。然后,启动一些子进程来执行共享列表中的任务,子进程也将任务添加到共享列表中。但我得到一个例外如下:
Traceback (most recent call last):
File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "gen_friendship.py", line 255, in worker
if tmpu in nodes:
File "<string>", line 2, in __contains__
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 722, in _callmethod
self._connect()
File "/usr/lib64/python2.6/multiprocessing/managers.py", line 709, in _connect
conn = self._Client(self._token.address, authkey=self._authkey)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 143, in Client
c = SocketClient(address)
File "/usr/lib64/python2.6/multiprocessing/connection.py", line 263, in SocketClient
s.connect(address)
File "<string>", line 1, in connect
error: [Errno 2] No such file or directory
我找到了一些关于如何在 python 多处理中使用共享列表的信息,比如 this。但仍有一些例外。我不知道异常的含义。普通列表和 manager.list 有什么区别?
代码如下:
nodes = multiprocessing.Manager().list()
lock = multiprocessing.Lock()
AMOUNT_OF_PROCESS = 10
def worker():
lock.acquire()
nodes.append(node)
lock.release()
if __name__ == "__main__":
for i in range(i):
nodes.append({"name":"username", "group":1})
processes = [None for i in range(AMOUNT_OF_PROCESS)]
for i in range(AMOUNT_OF_PROCESS):
processes[i] = multiprocessing.Process(taget=worker, args=())
processes[i].start()
问题是您的主进程在您启动所有工作进程后立即退出,这会关闭您的 Manager
。当您的 Manager
关闭时,children 的 none 可以使用您传递给它们的共享列表。您可以通过使用 join
等待所有 children 完成来修复它。只需确保在调用 join
:
start
所有进程
for i in range(AMOUNT_OF_PROCESS):
processes[i] = multiprocessing.Process(target=worker, args=())
processes[i].start()
for process in processes:
process.join()