ホームページ > バックエンド開発 > Python チュートリアル > Python マルチプロセッシングの「PicklingError: Can't pickle」を解決する方法?

Python マルチプロセッシングの「PicklingError: Can't pickle」を解決する方法?

DDD
リリース: 2024-12-15 08:24:10
オリジナル
884 人が閲覧しました

How to Solve Python Multiprocessing's

Python マルチプロセッシングでの PicklingError

Python マルチプロセッシングを使用すると、「PicklingError: Can't pickle : 属性検索 __builtin__.function が失敗しました」エラー。これは、関数をワーカー プロセスに送信しようとしたが、その関数がモジュールのトップ レベルで定義されていない場合に発生します。

Nested Function Issue

Inあなたの特定のケースでは、入れ子関数を呼び出しているピクルしている関数によってエラーが発生する可能性があります。外部関数 f() が最上位で定義されているにもかかわらず、ネストされた関数 h() を含む関数 g() を呼び出すと、マルチプロセッシングはネストされた関数をピクル化しようとして失敗します。

解決策

この問題を解決するには、ピクル化する関数をモジュールの最上位に移動します。あるいは、ネストされた関数を呼び出す別の関数をトップレベルで作成し、代わりにその関数をピクルすることもできます。

例:

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
ログイン後にコピー

トップレベルでwrapper_function()を定義することによって

追加考慮事項

  • ラムダ関数と関数ポインターの pickle 化はサポートされていません。
  • ファイル ハンドルやデータベース接続など、pickle 化できないオブジェクトにアクセスする関数は pickle 化できません。
  • 一般的に、関数をモジュールで使用する場合は、モジュールの最上位で関数を定義することをお勧めします。マルチプロセッシング。

以上がPython マルチプロセッシングの「PicklingError: Can't pickle」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート