La documentazione del modulo multiprocessing
mostra come passare una coda a un processo avviato con multiprocessing.Process
. Ma come posso condividere una coda con processi di lavoro asincroni avviati con apply_async
? Non ho bisogno di unioni dinamiche o altro, solo un modo per i lavoratori di (ripetutamente) riportare i risultati alla base.Condivisione di una coda di risultati tra più processi
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))
questo viene a mancare con: RuntimeError: Queue objects should only be shared between processes through inheritance
. Capisco cosa significa, e capisco il consiglio di ereditare piuttosto che richiedere il decapaggio/disfacimento (e tutte le restrizioni speciali di Windows). Ma come do Ho passato la coda in un modo che funziona? Non riesco a trovare un esempio e ho provato diverse alternative che hanno fallito in vari modi. Aiuto per favore?
Questo ha funzionato, grazie! C'era un problema non correlato con la chiamata asincrona nel mio codice originale, quindi ho copiato la correzione anche sulla tua risposta. – alexis