2

我和这个有类似的问题。我无法在 pathos 模块中运行简单的多处理例程并收到酸洗错误。下面是代码和错误。

from pathos.multiprocessing import ProcessingPool
import dill
class ProcClass(object):
    def __init__(self):
        pass
    def f(self,x):
        return x*x
pc = ProcClass()
pl = ProcessingPool(3)
print pl.map(pc.f, range(10))

返回的错误:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/multiprocessing/pool.py", line 320, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

我已经安装了:pp、dill、pox 和 multiprocessing,然后安装了 pathos。安装有效,但总是给我这个错误:


警告:以下依赖项之一未解决:pp(ft) >=1.6.4.5 dill >=0.2.4 pox >=0.2.2(多)处理


根据 pathos 的作者对类似问题的回复,安装似乎存在问题。我已经删除并重新安装了几次,每次都验证安装了正确的依赖项。我在 MacOS 上运行并使用 python 2.7。任何帮助将不胜感激!

4

2 回答 2

0

我有类似的错误。我将导入部分更改为:

from pathos.multiprocessing import ProcessingPool

至:

import pathos, multiprocess
from pathos.multiprocessing import ProcessingPool
import dill

并且代码有效。不知道发生了什么。也许就像迈克在另一个答案中提到的那样,pathos 正在寻找系统捆绑multiprocessing包而不是multiprocess. 也许明确地导入它以某种方式解决了这个问题......

于 2021-12-07T14:35:38.507 回答
0

您似乎缺少关键依赖项。使用pathos,您应该使用multiprocess,它是multiprocessing使用dill序列化程序的一个分支。

>>> import multiprocessing
>>> multiprocessing.__version__
'0.70a1'
>>> import multiprocess   
>>> multiprocess.__version__
'0.70.4.dev0'
>>> 
>>> multiprocess.Pool().map(lambda x:x*x, range(10))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> 
于 2015-10-09T11:41:52.437 回答