Sono nuovo di multiprocessing in Python e sto cercando di capire se dovrei usare Pool o Process per chiamare due funzioni asincrone. Le due funzioni che ho effettuato richiamano e analizzano le informazioni in due elenchi separati. A seconda della connessione Internet, ciascuna funzione potrebbe richiedere circa 4 secondi ciascuna. Mi rendo conto che il collo di bottiglia si trova nella connessione ISP e che il multiprocessing non lo accelera molto, ma sarebbe bello averli entrambi avviati asincroni. Inoltre, per me è una grande esperienza di apprendimento entrare nella multielaborazione di Python perché la userò più tardi.Processo o pool di multiprocessing di Python per quello che sto facendo?
Ho letto Python multiprocessing.Pool: when to use apply, apply_async or map? ed è stato utile, ma avevo ancora le mie domande.
Quindi un modo ho potuto farlo è:
Domande che ho per questa implementazione è: 1) Dal momento che unirsi a blocchi fino al completamento processo chiamando ... vuol dire questo processo p1 deve finire prima che il processo p2 venga avviato? Ho sempre capito che .join() è lo stesso di pool.apply() e pool.apply_sync(). Get() dove il processo genitore non può avviare un altro processo (attività) finché non viene completato quello corrente.
L'altra alternativa sarebbe qualcosa di simile:
def foo():
pass
def bar():
pass
pool = Pool(processes=2)
p1 = pool.apply_async(foo)
p1 = pool.apply_async(bar)
Domande che ho per questa implementazione potrebbe essere: 1) Ho bisogno di un pool.close(), pool.join()? 2) Pool.map() li completerebbe tutti prima che potessi ottenere risultati? E se è così, corrono ancora asynch? 3) In che modo pool.apply_async() differisce dal fare ogni processo con pool.apply() 4) In che cosa differirebbe dalla precedente implementazione con Process?
Sei sicuro che il processo p1 debba finire prima che il processo p2 venga avviato perché join()? l'output di http://bpaste.net/show/ruHgFTAAMkN4UT2INPqu/ sembra uscito in p2 prima che finisca p1. – dman
Intendevo che 'p2' sarà unito dopo che' p1' ha finito di unirsi. Scusa per l'incomprensione. Naturalmente, entrambi i processi si avviano non appena appropriato 'start()' è ritornato. –