Isu Pensiri dalam Pemprosesan Berbilang dengan Kaedah Contoh
Apabila bekerja dengan fungsi Pool.map() multiprocessing, pengguna mungkin menghadapi ralat bersiri apabila cuba untuk kaedah contoh jeruk. Isu ini timbul apabila pendekatan berorientasikan objek digunakan, mengakibatkan mesej ralat:
PicklingError: Tidak boleh mengambil: carian atribut __builtin__.instancemethod gagal
Memahami Masalah
Untuk memahami Masalahnya, adalah penting untuk mengetahui bahawa multiprocessing menggunakan serialisasi (penjerukan) untuk memindahkan objek antara proses. Kaedah terikat, bagaimanapun, tidak boleh dijeruk kerana ia bukan fungsi biasa. Mereka bergantung pada objek yang terikat kepada mereka, yang tidak boleh bersiri.
Menyelesaikan Isu
Untuk mengatasi isu bersiri ini, seseorang perlu melaksanakan penyelesaian dengan mendaftar fungsi dengan kaedah perpustakaan standard copy_reg. Fungsi ini akan membolehkan penjerukan dan pembongkaran kaedah terikat.
Contoh Penyelesaian
Kod berikut memberikan contoh cara melaksanakan penyelesaian menggunakan 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)
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Ralat Pensirian Apabila Menggunakan Kaedah Contoh dengan Python's Multiprocessing Pool.map()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!