La documentación del módulo multiprocessing
muestra cómo pasar una cola a un proceso iniciado con multiprocessing.Process
. Pero, ¿cómo puedo compartir una cola con procesos de trabajo asíncronos iniciados con apply_async
? No necesito una unión dinámica ni nada, solo una forma para que los trabajadores (repetidamente) informen sus resultados a la base.Compartir una cola de resultados entre varios procesos
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))
Esta falla con: RuntimeError: Queue objects should only be shared between processes through inheritance
. Entiendo lo que esto significa, y entiendo el consejo de heredar en lugar de exigir decapado/descabezado (y todas las restricciones especiales de Windows). Pero ¿cómo hacer Paso la cola de una manera que funciona? No puedo encontrar un ejemplo, y he probado varias alternativas que han fallado de varias maneras. ¿Ayuda por favor?
¡Eso lo hizo, gracias! Hubo un problema no relacionado con la llamada asincrónica en mi código original, así que también copié el arreglo a su respuesta. – alexis