首頁 > 後端開發 > Python教學 > 如何解決Python多處理的「PicklingError: Can't pickle」?

如何解決Python多處理的「PicklingError: Can't pickle」?

DDD
發布: 2024-12-15 08:24:10
原創
885 人瀏覽過

How to Solve Python Multiprocessing's

Python 多處理中的PicklingError

使用Python 多處理時,可能會遇到「PicklingError: Can't pickle :屬性查找__builtin__.function 失敗」錯誤。當您嘗試將函數傳送到工作進程,但函數未在模組的頂層定義時,就會發生這種情況。

巢狀函數問題

中根據您的具體情況,錯誤可能是由您正在酸洗的函數呼叫巢狀函數引起的。即使外部函數 f() 是在頂層定義的,如果它呼叫包含巢狀函數 h() 的函數 g(),多重處理將嘗試 pickle 巢狀函數並失敗。

解決方案

要解決此問題,請將您想要 pickle 的函數移到模組的頂層。或者,您可以在頂層建立一個單獨的函數來呼叫巢狀函數並醃製該函數。

例如:

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
登入後複製

透過在頂層定義wrapper_function()然後對其進行酸洗,可以避免酸洗錯誤。

附加註意事項

  • 不支援pickle lambda 函數和函數指標。
  • 無法pickle 存取不可picklable 物件(例如檔案句柄或資料庫連線)的函數。
  • 如果您打算在模組中使用函數,那麼在模組的頂層定義函數通常是一個很好的做法多處理。

以上是如何解決Python多處理的「PicklingError: Can't pickle」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板