Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menyelesaikan Python Multiprocessing 'PicklingError: Can't pickle '?

Bagaimana untuk Menyelesaikan Python Multiprocessing 'PicklingError: Can't pickle '?

DDD
Lepaskan: 2024-12-15 08:24:10
asal
884 orang telah melayarinya

How to Solve Python Multiprocessing's

PicklingError dalam Python Multiprocessing

Apabila menggunakan Python multiprocessing, anda mungkin menghadapi "PicklingError: Can't pickle : ralat carian atribut __builtin__.function failed". Ini berlaku apabila anda cuba menghantar fungsi kepada proses pekerja, tetapi fungsi itu tidak ditakrifkan pada tahap atas modul.

Isu Fungsi Bersarang

Dalam kes khusus anda, ralat mungkin disebabkan oleh fungsi yang anda penjeru memanggil fungsi bersarang. Walaupun fungsi luar f() ditakrifkan pada peringkat atas, jika ia memanggil fungsi g() yang mengandungi fungsi bersarang h(), multiprocessing akan cuba untuk mengambil fungsi bersarang dan gagal.

Penyelesaian

Untuk menyelesaikan isu ini, alihkan fungsi yang ingin anda acar ke peringkat atas modul. Sebagai alternatif, anda boleh mencipta fungsi berasingan di peringkat atas yang memanggil fungsi bersarang dan jeruk yang berfungsi sebaliknya.

Contohnya:

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
Salin selepas log masuk

Dengan mentakrifkan wrapper_function() di peringkat atas dan penjerukannya, anda boleh mengelakkan ralat penjerukan.

Tambahan Pertimbangan

  • Fungsi penjerukan lambda dan penunjuk fungsi tidak disokong.
  • Fungsi yang mengakses objek tidak boleh pilih, seperti pemegang fail atau sambungan pangkalan data, tidak boleh dijeruk.
  • Secara amnya, adalah amalan yang baik untuk menentukan fungsi di peringkat teratas modul jika anda berhasrat untuk menggunakannya dalam pelbagai pemprosesan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Python Multiprocessing 'PicklingError: Can't pickle '?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan