Compartir una cola de resultados entre varios procesos
La documentación para elmultiprocessing
l módulo @ muestra cómo pasar una cola a un proceso iniciado conmultiprocessing.Process
. Pero, ¿cómo puedo compartir una cola con procesos de trabajo asíncronos que comenzaron conapply_async
? No necesito una unión dinámica ni nada más, solo una forma para que los trabajadores informen (repetidamente) sus resultados a la base.
import multiprocessing
def worker(name, que):
que.put("%d is done" % name)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
q = multiprocessing.Queue()
workers = pool.apply_async(worker, (33, q))
Esto falla con:RuntimeError: Queue objects should only be shared between processes through inheritance
. Entiendo lo que esto significa, y entiendo los consejos para heredar en lugar de requerir decapado / desempaquetado (y todas las restricciones especiales de Windows). Pero cómohace ¿Paso la cola de una manera que funciona? No puedo encontrar un ejemplo, y he probado varias alternativas que fallaron de varias maneras. ¿Ayuda por favor