Python 多处理中管理器的行为

Python 多处理中管理器的行为,python,python-3.x,multiprocessing,Python,Python 3.x,Multiprocessing,我在Python 3中找不到对此行为的解释: from multiprocessing import Process, cpu_count, freeze_support, Manager class A: def __init__(self): # self._manager = Manager() # self._list = self._manager.list() manager = Manager() self

我在Python 3中找不到对此行为的解释:

from multiprocessing import Process, cpu_count, freeze_support, Manager

class A:
    def __init__(self):
        # self._manager = Manager()
        # self._list = self._manager.list()

        manager = Manager()
        self._list = manager.list()

    def producer(self):
        processes = []
        cores = cpu_count()
        for i in range(cores):
            process = Process(target=self.worker)
            process.start()
            processes.append(process)

        for process in processes:
            process.join()

    def worker(self):
        print('I was called')

if __name__ == '__main__':
    freeze_support()
    a = A()
    a.producer()
\uuuu init\uuuu
中使用此选项:

    self._manager = Manager()
    self._list = self._manager.list()
我在调用
process.start()
时收到一个错误
OSError:handle已关闭

\uuuu init\uuuu
中使用此选项:

    manager = Manager()
    self._list = manager.list()
一切似乎都起作用了

我读过,但找不到解释为什么在上面的示例中,
Manager()
的实例不能是变量。我最好的猜测是因为
Manager()
本身就是一个进程,通过这样的调用
target=self.worker
我试图打破处理进程的一些逻辑

问题:我说得对吗?还是我错过了什么

完全回溯:

Traceback (most recent call last):
  File "G:/files-from-server/apps/test_module/test_export.py", line 27, in <module>
    a.producer()
  File "G:/files-from-server/apps/test_module/test_export.py", line 15, in producer
    process.start()
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
    reduction.dump(process_obj, to_child)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py", line 939, in reduce_pipe_connection
    dh = reduction.DupHandle(conn.fileno(), access)
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py", line 170, in fileno
    self._check_closed()
  File "c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py", line 136, in _check_closed
    raise OSError("handle is closed")
OSError: handle is closed
回溯(最近一次呼叫最后一次):
文件“G:/server/apps/test_module/test_export.py中的文件”,第27行,在
a、 制作人()
文件“G:/producer第15行服务器/apps/test_模块/test_export.py中的文件”
process.start()
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\process.py”,第105行,在开始处
self.\u popen=self.\u popen(self)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\context.py”,第223行,在
返回_default_context.get_context().Process._Popen(Process_obj)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\context.py”,第322行,在
返回Popen(过程对象)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\popen\u spawn\u win32.py”,第65行,在\uuu init中__
减少.转储(进程对象,到子进程)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\reduce.py”,第60行,转储文件
ForkingPickler(文件、协议).dump(obj)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py”,第939行,位于reduce\u pipe\u connection中
dh=reduce.DupHandle(conn.fileno(),access)
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py”,第170行,文件号
自我检查关闭()
文件“c:\users\maxim\appdata\local\programs\python\python36-32\Lib\multiprocessing\connection.py”,第136行,检查\u关闭
升起操作错误(“手柄关闭”)
操作错误:句柄已关闭

请包含完整的回溯,而不仅仅是错误。@roganjosh我添加了完整的回溯