Python Multitraitement Lib Erreur (AttributeError: __exit__)
Obtiens cette erreur lors de l'utilisation de la pool.map(funct, iterable)
:
AttributeError: __exit__
Aucune Explication, la seule trace de la pile à l'pool.py fichier dans le module.
l'aide de cette manière:
with Pool(processes=2) as pool:
pool.map(myFunction, mylist)
pool.map(myfunction2, mylist2)
Je soupçonne il pourrait y avoir un problème avec le picklability (python doit pickle
, ou de transformer les données de la liste dans le flux d'octets) pourtant je ne suis pas sûr si cela est vrai ou si c'est comment déboguer.
EDIT: nouveau format de code qui génère cette erreur :
def governingFunct(list):
#some tasks
def myFunction():
# function contents
with closing(Pool(processes=2)) as pool:
pool.map(myFunction, sublist)
pool.map(myFunction2, sublist2)
ERREUR DE PRODUIT:
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
qu'entendez-vous par
Faire inclure le plein de sperme pour les erreurs, et de votre code.
while .. as
? vouliez-vous dire with
?Faire inclure le plein de sperme pour les erreurs, et de votre code.
while
est à l'évidence une erreur de syntaxe ici, par exemple, mais de l'exception, il est clair que vous avez utilisé with
vraiment.OriginalL'auteur sidewaiise | 2014-09-22
Vous devez vous connecter pour publier un commentaire.
En Python 2.x et 3.0, 3.1 et 3.2,
multiprocessing.Pool()
objets sont pas du contexte, les gestionnaires de. Vous ne pouvez pas les utiliser dans unwith
déclaration. Seulement en Python 3.3, et vous pouvez les utiliser en tant que tel. À partir de la Python 3multiprocessing.Piscine()
de la documentation:Pour les précédentes versions de Python, vous pouvez utiliser
contextlib.de clôture()
, mais de prendre en compte cette appelleronspool.close()
, paspool.terminate()
. Mettre fin manuellement dans ce cas:ou créer votre propre
terminating()
gestionnaire de contexte:PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
sont que vous essayez d'utiliser une méthode d'une classe peut-être? Voir le Multitraitement: l'utilisation de la Piscine.carte sur une fonction définie dans une classe
Heh, j'étais juste la lecture de ce que vous avez publié cette. Merci je vais le lire et de le commenter peu de temps.
Pas sûr de comprendre la solution sur ce lien - je ne suis pas à l'aide de classes. C'est simple, comme je l'ai écrit ci-dessus, sauf qu'il est à l'intérieur d'une autre fonction.... par exemple: **** reportez-vous à Édité Question ^ **** Donc pas sûr.. des idées?
pour une raison quelconque, le décorateur ligne avait disparu. D'importation uniquement quand vous avez réellement l'intention de l'utiliser! 🙂 (et désolé).
OriginalL'auteur Martijn Pieters
with
déclaration est de l'objet qui ont__enter__
et__exit__
fonctions, c'est à dire Contexte Les Types De Gestionnaire Demultiprocessing.Pool
est pas du Contexte, le Type de Gestionnaire.essayez d'effectuer les opérations suivantes:
ok. ne savent pas que c'est le contexte mgr en Python 3.3, et jusqu'
OriginalL'auteur Elisha