多处理,生成和缺少属性

我编写了一些多处理代码,这些代码在Linux和OSX上可以正常工作,但在Windows上却很麻烦。我已经解决了大多数spawn-vs-fork问题,但是还有一个我没有弄清楚的问题(我怀疑与酸洗有关)。

问题在于,一旦我调用Process(...).start(),生成的MPQueue类的流程副本就会丢失其_size属性。

因此,我在发生异常的地方放置了一个断点。确实,它似乎丢失了。但是,对我的MPQueue.__init__函数进行重新排序(以便在调用super之前初始化self._size)可以使self._size在调试器中可见。我可以在Pycharm中创建手表,但当应用程序代码尝试访问self._size时,它仍然会引发AttributeError异常。

(用于MPQueue的)相关代码几乎与https://github.com/vterron/lemon/blob/master/util/queue.py

相同

但是您可以看到该属性确实存在:

    def __init__(self,*args,**kwargs):
        super(MPQueue,self).__init__(*args,**kwargs,ctx=multiprocessing.get_context())
        self._size = SharedCounter(0)

你知道这是怎么回事吗?

Process Process-1:
Traceback (most recent call last):
  File "C:\Users\D\Miniconda3\envs\hempy\lib\multiprocessing\process.py",line 258,in _bootstrap
    self.run()
  File "C:\Users\D\Miniconda3\envs\hempy\lib\multiprocessing\process.py",line 93,in run
    self._target(*self._args,**self._kwargs)
  File "C:\Users\D\Documents\repos\HexaFEM\hempy\parallel.py",line 251,in _kernel_wrapper
    self._computational_kernel(process_idx,pre_kwargs,kwargs)
  File "C:\Users\D\Documents\repos\HexaFEM\hempy\parallel.py",line 265,in _computational_kernel
    for i in iter(self.indexq.get,None):
  File "C:\Users\D\Documents\repos\HexaFEM\hempy\mpqueue.py",line 88,in get
    self._size.increment(-1)
AttributeError: 'MPQueue' object has no attribute '_size'
hxcn2004 回答:多处理,生成和缺少属性

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3105934.html

大家都在问