[英]Multiprocessing in Python using Pool Class
我想在windows(zeppelin notebook)中的python(特別是Pool Class)中使用多處理。 但是在閱讀了很多之后,我了解到 Pool 類在其后端使用了pickle,並且只能用於可以pickle 的對象。 由於我無法在 Python 中使用 pickle 序列化函數或類(至少在 3.6 版本中),我發現 pathos.multiprocessing 庫可用於執行多處理,因為它在后端使用dill
而不是 pickle,根據dill
包文檔可以序列化任何東西。 但是當我使用它時,我遇到了錯誤。 下面是我使用的簡單代碼:
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_async 或 map_async,我也遇到了同樣的錯誤。 有人可以幫我找出問題所在。
提前致謝
另外,如果我使用這樣的代碼:
import multiprocessing as mp
def cube(x):
return x**3
if __name__ == '__main__':
p = mp.Pool(4)
p.apply(cube, [1,2,3])
我沒有看到任何輸出返回。 不確定是什么問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.