簡體   English   中英

使用池類在 Python 中進行多處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM