Sto usando python 2.7.10. Ho letto molti file, li ho archiviati in una grande lista, poi ho provato a chiamare multiprocessing e passare la lista grande a quei multiprocessi in modo che ogni processo possa accedere a questa grande lista e fare qualche calcolo.multiprocessing di python, big data turn process in sleep
sto usando pool Ti piace questa:
def read_match_wrapper(args):
args2 = args[0] + (args[1],)
read_match(*args2)
pool = multiprocessing.Pool(processes=10)
result=pool.map(read_match_wrapper,itertools.izip(itertools.repeat((ped_list,chr_map,combined_id_to_id,chr)),range(10)))
pool.close()
pool.join()
Fondamentalmente, io sto passando più variabili di funzione 'read_match'. Per utilizzare pool.map, scrivo la funzione 'read_match_wrapper'. Non ho bisogno di risultati da quei processi. Voglio solo che corrano e finiscano.
Posso far funzionare tutto questo processo quando la lista dei miei dati 'ped_list' è piuttosto piccola. Quando carico tutti i dati, come 10G, quindi tutti i multiprocessi generati mostrano "S" e sembra non funzionare affatto.
Non so se esiste un limite di quanti dati è possibile accedere attraverso la piscina? Ho davvero bisogno di aiuto su questo! Grazie!
Qual è il codice di 'read_match'? –
Potresti controllare la sezione 'itertools.izip()' ha restituito un valore corretto? Se i tuoi dati sono realmente 10G, con 'repeat()', potrebbe peggiorare e probabilmente consumare troppa memoria. – Jkm
Sì, penso che la memoria sia il problema qui. Ogni volta che genera un processo, la memoria viene copiata. E il cluster non può permetterselo! – odeya