Forum >> Principianti >> chiarimenti sul modulo multiprocessing

Pagina: 1

Buongiorno a tutti,
sto lavorando con un programma piuttosto lungo (impiega qualche ora a terminare), quindi vorrei riuscire a farlo lavorare in parallelo sui 4 cores del mio pc, solo che dalle varie guide che ho letto mi sorgono alcuni domande:
- la prima è sicuramente se qualcuno ha qualche consiglio su che oggetto usare: al momento sono indeciso tra Pool() e Process() credo che Pool sia piu' promettente, nonchè piu semplice da usare, ma qui vengo alla seconda domanda...
- l'oggetto Pool lavora su cores diversi o sullo stesso core alternando i processi? Lo chiedo perchè ho provato a testarne il funzionamento con un semplice progamma:

from multiprocessing import Pool

import time

work = (["A", 5], ["B", 2], ["C", 1], ["D", 3], ["E",4])


def work_log(work_data):
    print(" Process %s waiting %s seconds" % (work_data0, work_data1))
    time.sleep(int(work_data1))
    print(" Process %s Finished." % work_data0)


def pool_handler():
    p = Pool(2)
    p.map(work_log, work)


if __name__ == '__main__':
    pool_handler()
e l'output che ottengo è il seguente:
Process A waiting 5 seconds
Process B waiting 2 seconds
Process B Finished.
Process C waiting 1 seconds
Process C Finished.
Process D waiting 3 seconds
Process A Finished.
Process E waiting 4 seconds
Process D Finished.
Process E Finished.

provando poi con Pool(5) anziché (2) l'output è di questo tipo:

Process A waiting 5 seconds
Process B waiting 2 seconds
Process C waiting 1 seconds
Process D waiting 3 seconds
Process E waiting 4 seconds
Process C Finished.
Process B Finished.
Process D Finished.
Process E Finished.
Process A Finished.

che mi ha lasciato spiazzato perchè io ho solo 4 cores e quindi mi sarei immaginato di ottenere lo stesso output di Pool(4), ovvero:

Process A waiting 5 seconds
Process B waiting 2 seconds
Process C waiting 1 seconds
Process D waiting 3 seconds
Process C Finished.
Process E waiting 4 seconds
Process B Finished.
Process D Finished.
Process A Finished.
Process E Finished.

Grazie e scusate per la lunghezza del messaggio



che mi ha lasciato spiazzato perchè io ho solo 4 cores e quindi mi sarei immaginato di ottenere lo stesso output di Pool(4), ovvero:
Ciao caro, qualche tempo fa avevo letto questo, dove vengono spiegati molto bene i concetti basilari dell'argomento.

Cya
Grazie per la risposta, era una pagina che avevo già trovato, ma non le avevo prestato la debita attenzione, ora credo di aver capito qualcosa in piu: posso dare un numero qualsiasi di processi in pasto a Pool, ma le performance non migliorano una volta che il numero di processi attivi occupa completamente i miei cores.


Pagina: 1



Esegui il login per scrivere una risposta.