python多处理管理器列表错误: [Errno 2] No such file or directory

标签 python multiprocessing

我在 python 中写了一个多处理程序。我使用 multiprocessing.Manager().list() 在子进程中共享列表。首先,我在主进程中添加了一些任务。然后,启动一些子进程来执行共享列表中的任务,子进程也将任务添加到共享列表中。但我有一个异常(exception)如下:

    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 .但仍有一些异常(exception)。我不知道异常的含义。 common list 和 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 关闭时,所有 child 都不能使用您传递给他们的共享列表。您可以通过使用 join 等待所有 child 完成来修复它。只需确保在调用 join 之前确实启动 所有进程:

for i in range(AMOUNT_OF_PROCESS):
    processes[i] = multiprocessing.Process(target=worker, args=())
    processes[i].start()
for process in processes:
    process.join()

关于python多处理管理器列表错误: [Errno 2] No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702157/

相关文章:

python - 如何在 Python 中读取一行 csv 数据?

python - Unicode 字符渲染

python - 将 100% 的内核与多处理模块一起使用

python - 从模板中的标签脚本调用 Django python 函数

python - MySQL - 用于数据分析和统计的网络界面

python - 具有多处理卡住计算机的 Matplotlib

python - 使用Python的多处理模块的同步问题

Python 锁定临界区

使用 SSH 或 FTP 压缩远程目录的 Pythonic 方法

c - vfork() 调用后退出和返回之间的区别