Estoy tratando de usar una cola con la biblioteca de multiprocesamiento en Python. Después de ejecutar el código a continuación (las instrucciones de impresión funcionan), pero los procesos no se cierran después de que llamo a join en la cola y todavía están vivos. ¿Cómo puedo finalizar los procesos restantes?Cola de multiprocesamiento en Python
Gracias!
def MultiprocessTest(self):
print "Starting multiprocess."
print "Number of CPUs",multiprocessing.cpu_count()
num_procs = 4
def do_work(message):
print "work",message ,"completed"
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = multiprocessing.JoinableQueue()
for i in range(num_procs):
p = multiprocessing.Process(target=worker)
p.daemon = True
p.start()
source = ['hi','there','how','are','you','doing']
for item in source:
q.put(item)
print "q close"
q.join()
#q.close()
print "Finished everything...."
print "num active children:",multiprocessing.active_children()
¿Hay alguna razón por la que no coloque a None en la cola después de finalizar? Pensé que task_done() podría ayudar a evitar ese problema. Estaba tratando de modelar mi código después del ejemplo en la parte inferior de esta página: http://docs.python.org/library/queue.html – aerain
Esto realmente no funciona :( – aerain
No calificando la solución, pero haciendo alusión a cómo hacer que funcione: mover la línea de declaración "q =" antes de su primer uso en def worker() ... ;-) – Dilettant