首页 > 解决方案 > 将 manager.dict 对象作为参数传递时,为什么我的代码会返回损坏的管道错误?

问题描述

运行以下函数时:

#returns list of hostIds on network;
def getHostsOnNetwork(surveyResults, hosts):
    notifEnabledMacs = [host['macAddr']
        for host in hosts.values()
        if host['notificationEnabled']
   ]
    macsOnNetwork = [host['mac'] for host in surveyResults]

    return [host['id']
        for host in hosts.values()
        if host['macAddr'] in macsOnNetwork
    ]

我将一个manager.dict对象作为“主机”传递。结果我收到以下错误:

 Traceback (most recent call last):
   File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
     self.run()
   File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
     self._target(*self._args, **self._kwargs)
   File "main.py", line 101, in notifsProducer
     oldHostSet = currentHostSet
   File "/home/patrick/notificationApp;/networking.py", line 82, in getHostsOnNetwork
     for host in hosts.values()
   File "<string>", line 2, in values
   File "/usr/lib/python3.8/multiprocessing/managers.py", line 834, in _callmethod
     conn.send((self._id, methodname, args, kwds))
   File "/usr/lib/python3.8/multiprocessing/connection.py", line 206, in send
     self._send_bytes(_ForkingPickler.dumps(obj))
   File "/usr/lib/python3.8/multiprocessing/connection.py", line 411, in _send_bytes
     self._send(header + buf)
   File "/usr/lib/python3.8/multiprocessing/connection.py", line 368, in _send
     n = write(self._handle, buf)
 BrokenPipeError: [Errno 32] Broken pipe

似乎编译器正在尝试写入 manager.dict 对象,但为什么呢?我不会在函数中更改它的任何值。如何解决此错误?

任何指导表示赞赏。谢谢。

标签: pythonmultiprocessing

解决方案


推荐阅读