Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Pool类在Python中进行多处理_Python_Serialization_Python Multiprocessing_Dill_Pathos - Fatal编程技术网

使用Pool类在Python中进行多处理

使用Pool类在Python中进行多处理,python,serialization,python-multiprocessing,dill,pathos,Python,Serialization,Python Multiprocessing,Dill,Pathos,我想在windows(齐柏林飞艇笔记本)中使用python中的多处理(特别是池类)。但是在阅读了很多之后,我知道Pool类在其后端使用pickle,并且只能用于可以被pickle的对象。由于我无法在Python中使用pickle序列化函数或类(至少在3.6版本中),我发现paths.multiprocessing库可以用于执行多处理,因为它使用dill而不是后端的pickle,根据dill包文档,后端的pickle可以序列化任何内容。但是当我使用它时,我犯了错误。下面是我使用的简单代码: imp

我想在windows(齐柏林飞艇笔记本)中使用python中的多处理(特别是池类)。但是在阅读了很多之后,我知道Pool类在其后端使用pickle,并且只能用于可以被pickle的对象。由于我无法在Python中使用pickle序列化函数或类(至少在3.6版本中),我发现paths.multiprocessing库可以用于执行多处理,因为它使用
dill
而不是后端的pickle,根据
dill
包文档,后端的pickle可以序列化任何内容。但是当我使用它时,我犯了错误。下面是我使用的简单代码:

import pathos.multiprocessing as mp

def cube(x):
    return x**3

p = mp.Pool(4)

p.apply(cube, [1,2,3])
这就是我得到的错误:

py4j.protocol.Py4JError: An error occurred while calling o0.__getstate__. Trace:
py4j.Py4JException: Method __getstate__([]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344)
    at py4j.Gateway.invoke(Gateway.java:279)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:209)
    at java.lang.Thread.run(Thread.java:748)
即使使用map、apply\u async或map\u async,我也会遇到相同的错误。有人能帮我找出这个问题吗


如果我使用这样的代码,请提前感谢

import multiprocessing as mp

def cube(x):
    return x**3

if __name__ == '__main__':
    p = mp.Pool(4)
    p.apply(cube, [1,2,3])

我没有看到任何返回的输出。不确定问题是什么。

对于您给出的示例,标准多进程库可以工作。您正在尝试映射更复杂的内容吗?嗨,James,您不能使用标准的多处理库来完成此操作。当您使用标准库执行此操作时,会出现pickle错误-
\u pickle.PicklingError:无法pickle:\uuu main\uuuu上的属性查找多维数据集失败
。是否尝试以交互模式运行?是的,我使用的是齐柏林飞艇notebook@ShubhamKedia你用任何方法解决了这个问题吗?阅读评论,他正在以交互模式运行齐柏林飞艇笔记本