/ / Ako získam výstup z multiprocesingu v Pythone? - python

Ako získať výstup z multiprocesing Python?-python

Takže sa snažím urýchliť jednu rutinu pomocou modulu Multiprocessing v Pythone. Chcem byť schopný prečítať niekoľko súborov CSV rozdelením úlohy medzi niekoľko jadier, pre ktoré mám:

def csvreader(string):

from numpy import genfromtxt;

time,signal=np.genfromtxt(string, delimiter=",",unpack="true")
return time,signal

Potom zavolám túto funkciu vyslovením:

if __name__ == "__main__":
for i in range(0,2):
p = multiprocessing.Process(target=CSVReader.csvreader, args=(string_array[i],))
p.start()

Ide o to, že to neukladá žiadny výstup. Prečítal som si všetky fóra online a videl som, že existuje spôsob, ako s multiprocessing.queue, ale nerozumiem mu celkom dobre. Existuje nejaká jednoduchá a priama metóda?

odpovede:

2 pre odpoveď č. 1

Vaša najlepšia stávka je multiprocessing.Queue alebo multiprocessing.Pipe, ktoré sú navrhnuté presne pre tento problém. Umožňujú vám bezpečne a jednoducho odosielať údaje medzi procesmi.

Ak by ste chceli vrátiť svoj výstup csvreader funkcie, mali by ste k nemu podať ďalší argument, ktorým je multiprocessing.Queue prostredníctvom ktorého budú dáta zaslané späť do hlavného procesu. Namiesto returnAk tieto hodnoty zadáte, umiestnite ich do frontu ahlavný proces ich načíta neskôr. Ak nie sú pripravení, keď sa ich proces pokúša získať, v predvolenom nastavení sa blokuje (čaká), kým nie sú k dispozícii

Vaša funkcia by teraz vyzerala takto:

def cvsreader(string, q):
q.put(np.genfromtxt(string, delimiter=",", unpack="true"))

Hlavnou rutinou by bolo:

if __name__ == "__main__"
q = multiprocessing.Queue()
for i in range(2):
p = multiprocessing.Process(target=csvreader, args=(string_array[i], q,))
p.start()

# Do anything else you need in here

time=np.empty(2,dtype="object")
signal=np.empty(2,dtype="object")
for i in range(2):
time[i], signal[i] = q.get() # Returns output or blocks until ready
# Process my output

Upozorňujeme, že musíte zavolať Queue.get() pre každý položka, ktorú chcete vrátiť.

Pozrite sa na dokumentáciu k internetu multiprocessing modul pre viac príkladov a informácií.


0 pre odpoveď č. 2

Pomocou príkladu z úvod do dokumentácie:

if __name__ == "__main__":
pool = Pool(2)
results = pool.map(CSVReader.csvreader, string_array[:2])
print(results)