0

我正在尝试创建一系列具有特定作业的工作线程。当前是从一个队列中取出,做一些处理,然后把输出放到第二个队列中。

当我尝试使用多处理(多进程?有什么区别?)模块时,出现以下问题

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

这似乎是某种 cpickle 问题。我正在处理__getattr__被覆盖的对象,但我确实使用了

if name.startswith('__') and name.endswith('__'):
        return object.__getattr__(name)

以确保TypeError不再调用。多处理酸洗问题的答案是使用pathos,但我看不到在pathos. 我也看不到产生Processin的方法pathos。我见过的每个示例都使用pool. 例如,我还看到了一个响应,pathos.helpers.mp.process.Process但找不到模块ImportError: cannot import name helpers。这有可能吗?

4

1 回答 1

1

我是pathos作者。是的,您可以使用Processfrom pathos,但是,如果您对此感兴趣,那么使用 可能更容易multiprocess。一些歧义:multiprocess是 的一个叉子multiprocessing,叉子替换pickledill-- 并且没有其他变化。 pathos,然后在 之上添加一个附加层multiprocess,主要是在Pool对象上。 pathos.multiprocessing是……之上的附加层multiprocess,如果你想直接访问multiprocessfrom pathos,你可以得到它。看:

>>> import pathos
>>> pathos.helpers.mp.Process
<class 'multiprocess.process.Process'>
>>> 
>>> import multiprocess as mp
>>> mp.Process
<class 'multiprocess.process.Process'>
>>> 
于 2016-03-09T20:05:15.570 回答