首頁 > 後端開發 > Python教學 > 在 Python 的 Multiprocessing Pool.map() 中使用實例方法時,如何解決序列化錯誤?

在 Python 的 Multiprocessing Pool.map() 中使用實例方法時,如何解決序列化錯誤?

Susan Sarandon
發布: 2024-12-06 19:53:10
原創
528 人瀏覽過

How Can I Resolve Serialization Errors When Using Instance Methods with Python's Multiprocessing Pool.map()?

使用實例方法進行多處理時的序列化問題

使用多處理的Pool.map() 函數時,使用者在嘗試執行下列操作時可能會遇到序列化錯誤pickle 實例方法。當採用物件導向的方法時會出現此問題,導致錯誤訊息:

PicklingError: Can't pickle : attribute Lookup __builtin__.instancemethod failed

理解問題

要理解問題,重要的是要認識到多處理利用序列化(pickling)在進程之間傳輸物件。然而,綁定方法不能被 pickle,因為它們不是簡單的函數。它們依賴它們所綁定的對象,而該對像是不可序列化的。

解決問題

要解決此序列化問題,需要透過註冊來實現解決方法具有 copy_reg 標準函式庫方法的函數。此函數將啟用綁定方法的 pickle 和 unpickle。

範例解決方案

以下程式碼提供如何使用 copy_reg 實作解決方案的範例:

import copy_reg
import types

def pickle_method(method):
    func_name = method.__func__.__name__
    cls = method.__self__.__class__
    return (_unpickle_method, (func_name, cls))

def _unpickle_method(func_name, cls):
    for cls in cls.__mro__:
        try:
            func = getattr(cls, func_name)
            break
        except AttributeError:
            pass

    return func

copy_reg.pickle(types.MethodType, pickle_method)
登入後複製

以上是在 Python 的 Multiprocessing Pool.map() 中使用實例方法時,如何解決序列化錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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