Bonjour,
J'essaie de lancer un processus (en python 3.5) qui devrait exécuter une fonction décorée, mais ça ne marche pas.
Voici le message d'erreur qui s'affiche:
La fonction décorée semble donc ne plus être une fonction à proprement parler. Or, en dehors de mon processus elle se comporte tout à fait comme une fonction.AttributeError: Can't pickle local object 'deco.<locals>.fonctionDecoree'
Voici un bout de code ayant pour but de résumer la situation. Si vous l'exécuter une fois avec "@deco" activé, et une fois avec "@deco" en commentaire, ça devrait devenir clair.
Pour moi cette situation n'est pas tellement un problème, mais plutôt un comportement inattendu que j'ai rencontré un peu par hasard, en faisant des essais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 from multiprocessing import Process def deco(fonction): def fonctionDecoree(): print("La fonction qu'on appelle a été décorée.") fonction() return fonctionDecoree @deco def fonctionTest(): print("On appelle la fonction d'essai.") if __name__ == "__main__": print("Le type de la fonction d'essai:") print(type(fonctionTest)) print("--------------------------------\n") fonctionTest() print("--------------------------------\n") print("Démarrage d'un processus exécutant la fonction:") p = Process(target=fonctionTest) p.start() # La méthode qui fait planter le code quand @deco est activé. print("Le processus a bien été démarré.")
Pourtant j'aimerais savoir d'où ça vient, parce que j'aime beaucoup utiliser les décorateurs, et ce n'est pas la première fois que leur étrange comportement me prend au dépourvu. Merci d'avance de m'aider.
Partager