Maison > développement back-end > Tutoriel Python > Comment résoudre 'PicklingError: Can't pickle' de Python Multiprocessing ?

Comment résoudre 'PicklingError: Can't pickle' de Python Multiprocessing ?

DDD
Libérer: 2024-12-15 08:24:10
original
885 Les gens l'ont consulté

How to Solve Python Multiprocessing's

PicklingError dans le multitraitement Python

Lors de l'utilisation du multitraitement Python, vous pouvez rencontrer une erreur "PicklingError : Impossible de décaper  : la recherche d'attribut __builtin__.function a échoué ». Cela se produit lorsque vous tentez d'envoyer une fonction à un processus de travail, mais que la fonction n'est pas définie au niveau supérieur d'un module.

Problème de fonction imbriquée

Dans votre cas spécifique, l'erreur peut être provoquée par la fonction que vous décapez appelant une fonction imbriquée. Même si la fonction externe f() est définie au niveau supérieur, si elle appelle une fonction g() qui contient une fonction imbriquée h(), le multitraitement tentera de décaper la fonction imbriquée et échouera.

Solution

Pour résoudre ce problème, déplacez la fonction que vous souhaitez décaper vers le niveau supérieur du module. Alternativement, vous pouvez créer une fonction distincte au niveau supérieur qui appelle la fonction imbriquée et pickle cette fonction à la place.

Par exemple :

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
Copier après la connexion

En définissant wrapper_function() au niveau supérieur et en le décapant, vous pouvez éviter l'erreur de décapage.

Supplémentaire Considérations

  • Le décapage des fonctions lambda et des pointeurs de fonction n'est pas pris en charge.
  • Les fonctions qui accèdent à des objets non décapables, tels que les descripteurs de fichiers ou les connexions à une base de données, ne peuvent pas être décapées.
  • C'est généralement une bonne pratique de définir des fonctions au niveau supérieur d'un module si vous avez l'intention de les utiliser dans multitraitement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal