python中的多处理模块-如何将类传递给进程?

python中的多处理模块-如何将类传递给进程?,python,multiprocessing,pickle,Python,Multiprocessing,Pickle,我编写了一个类来处理来自特定仪器的数据。类的每个实例都包含此数据的不同示例。下面的代码中给出了一个等效的玩具示例,它是以下代码的修改/残缺版本: 主if语句下的第一个代码块用于确认类是可pickle的。在此之后,对函数测试的调用运行实际的问题。当我在Windows 7上使用Python 3.6.6运行此操作时,会出现以下错误: Traceback (most recent call last): File "C:\Users\rpoolman\Documents\QAS Results\Ob

我编写了一个类来处理来自特定仪器的数据。类的每个实例都包含此数据的不同示例。下面的代码中给出了一个等效的玩具示例,它是以下代码的修改/残缺版本:

主if语句下的第一个代码块用于确认类是可pickle的。在此之后,对函数测试的调用运行实际的问题。当我在Windows 7上使用Python 3.6.6运行此操作时,会出现以下错误:

Traceback (most recent call last):
  File "C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py", line 82, in <module>
    test()
  File "C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py", line 62, in test
    print('\t', done_queue.get().c)
  File "C:\Users\rpoolman\WinPython-64bit-3.6.6.1Qt5\python-3.6.6.amd64\lib\multiprocessing\queues.py", line 113, in get
    return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'TestMaths' on <module '__main__' from 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\Common7\\IDE\\Extensions\\Microsoft\\Python\\Core\\ptvsd_launcher.py'>
回溯(最近一次呼叫最后一次):
文件“C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py”,第82行,在
测试()
文件“C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py”,第62行,在测试中
打印('\t',done\u queue.get().c)
文件“C:\Users\rpoolman\WinPython-64bit-3.6.6.1Qt5\python-3.6.6.amd64\lib\multiprocessing\queues.py”,第113行,在get中
返回\u ForkingPickler.loads(res)
AttributeError:无法在上获取属性“TestMath”

我知道这门课应该是可挑选的,而且我认为数学考试是可以挑选的。然而,这个错误似乎与多处理模块的Pickle版本有关。有没有办法重构我的类,以便使用多处理?

无法重现-我没有收到发布代码的错误/异常。Python 3.4.4。它会打印一系列的
无序结果
-七的倍数。如果在返回之前将
时间.睡眠(2)
插入
计算
,您是否仍然会收到错误?@wwii-您使用的是什么操作系统?我记得读到,在使用多处理模块时,windows和apple/linux之间有什么区别。@Darkonaut-恐怕添加延迟对我来说没有什么区别。@RHP请尝试将进程附加到列表中,然后通过迭代列表来启动它们。
Traceback (most recent call last):
  File "C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py", line 82, in <module>
    test()
  File "C:\Users\rpoolman\Documents\QAS Results\Objective2\analysis\test2.py", line 62, in test
    print('\t', done_queue.get().c)
  File "C:\Users\rpoolman\WinPython-64bit-3.6.6.1Qt5\python-3.6.6.amd64\lib\multiprocessing\queues.py", line 113, in get
    return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'TestMaths' on <module '__main__' from 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\Common7\\IDE\\Extensions\\Microsoft\\Python\\Core\\ptvsd_launcher.py'>