我正在尝试创建一系列具有特定作业的工作线程。当前是从队列中抽取,进行一些处理,并将输出放在第二个队列中。
当我尝试使用多处理(多进程?有什么区别?)模块时,我遇到以下问题
Traceback (most recent call last):
File "C:\Python27\lib\multiprocessing\queues.py", line 264, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
这似乎是某种形式的问题。我正在处理__getattr__
被覆盖的对象,但我确实使用了
if name.startswith('__') and name.endswith('__'):
return object.__getattr__(name)
确保不再调用TypeError
。多处理的酸洗问题的答案是使用pathos
,但我没有看到pathos
中访问任何类型队列的方法。我也没有看到在Process
中生成pathos
的方法。我见过的每个例子都使用pool
。我还看到了pathos.helpers.mp.process.Process
的回复,但是找不到我的模块 - 例如ImportError: cannot import name helpers
。这有可能吗?
答案 0 :(得分:1)
我是pathos
作者。是的,您可以使用Process
中的pathos
,但是,如果这是您感兴趣的内容,则可能更容易使用multiprocess
。一些消除歧义:multiprocess
是multiprocessing
的分支,其中分支用pickle
替换dill
- 并且没有其他更改。 pathos
,然后在multiprocess
之上添加一个额外的图层,主要在Pool
个对象上。 pathos.multiprocessing
是multiprocess
之上的附加图层...如果您希望从multiprocess
直接访问pathos
,则可以获取它。参见:
>>> import pathos
>>> pathos.helpers.mp.Process
<class 'multiprocess.process.Process'>
>>>
>>> import multiprocess as mp
>>> mp.Process
<class 'multiprocess.process.Process'>
>>>