je suis arrivé unAttributeError: l'objet '_MainProcess n'a pas de attribut '_exiting'
AttributeError: '_MainProcess' object has no attribute '_exiting'
à partir d'une application Python. Malheureusement ce code doit exécuter Python 2.5 et donc le module processing
aujourd'hui connu sous le nom multiprocessing
. Ce que je faisais est de créer un Process
avec un Queue
et un put
un élément dans la file d'attente du processus principal. En regardant dans le code processing.queue
, je peux voir qu'un thread d'alimentation est démarré. Ce thread d'alimentation vérifie alors currentProcess()._exiting
, mais currentProcess()
évalue à un _MainProcess
qui n'a pas cet attribut comme peut être vu dans le module processing.process
. Comment résoudre ceci? Est-ce un bug dans processing
? Si oui, puis-je simplement l'utiliser en utilisant currentProcess()._exiting = False
?
exemple minimal:
#!/usr/bin/python
import processing
import processing.queue
class Worker(processing.Process):
def __init__(self):
processing.Process.__init__(self)
self.queue = processing.queue.Queue()
def run(self):
element = self.queue.get()
print element
if __name__ == '__main__':
w = Worker()
w.start()
# To trigger the problem, any non-pickleable object is to be passed here.
w.queue.put(lambda x: 1)
w.join()
Pouvez-vous poster un extrait qui reproduit l'erreur? Aussi, j'aime vraiment le mot * monkeypatch *. Dans l'attente de l'utiliser bientôt :) –
Je crois qu'il y a une bonne façon de faire ce que vous voulez sans patcher. – khachik
@ Space_C0wb0y Je suis désolé, j'ai eu un peu de problèmes avec la réduction de ces 3k lignes de code à un plus petit exemple. : -/ –