ホームページ >バックエンド開発 >Python チュートリアル >Python のマルチプロセッシング Pool.map() でインスタンス メソッドを使用する場合のシリアル化エラーを解決するにはどうすればよいですか?
インスタンス メソッドを使用したマルチプロセッシングにおけるシリアル化の問題
マルチプロセッシングの Pool.map() 関数を使用する場合、ユーザーが実行しようとするとシリアル化エラーが発生する可能性があります。 pickle インスタンス メソッド。この問題は、オブジェクト指向のアプローチが採用されている場合に発生し、次のエラー メッセージが表示されます。
PicklingError: Can't pickle: 属性検索 __builtin__.instancemethod failed
問題を理解する
へこの問題を理解するには、マルチプロセッシングがシリアル化 (ピックリング) を利用してプロセス間でオブジェクトを転送することを認識することが重要です。ただし、バインドされたメソッドはプレーン関数ではないため、ピクル化できません。これらはバインドされているオブジェクトに依存しており、シリアル化可能ではありません。
問題の解決
このシリアル化の問題を解決するには、登録することで回避策を実装する必要があります。 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 のマルチプロセッシング Pool.map() でインスタンス メソッドを使用する場合のシリアル化エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。