Ho uno script che include l'apertura di un file da un elenco e quindi fare qualcosa al testo all'interno di quel file. Sto usando Python multiprocessing e Pool per provare a parallelizzare questa operazione. Un'astrazione dello script è qui sotto:multiprocessing python apply_async utilizza solo un processo
import os
from multiprocessing import Pool
results = []
def testFunc(files):
for file in files:
print "Working in Process #%d" % (os.getpid())
#This is just an illustration of some logic. This is not what I'm actually doing.
for line in file:
if 'dog' in line:
results.append(line)
if __name__=="__main__":
p = Pool(processes=2)
files = ['/path/to/file1.txt', '/path/to/file2.txt']
results = p.apply_async(testFunc, args = (files,))
results2 = results.get()
Quando eseguo questo la stampa della id processo è lo stesso per ogni iterazione. Fondamentalmente quello che sto cercando di fare è prendere ogni elemento della lista di input e distribuirlo in un processo separato, ma sembra che un processo stia facendo tutto il lavoro.
O forse solo 'map' se avete intenzione di' risultati .get() 'subito. – mgilson
Apprezzo la risposta, ma sto cercando di restare con apply_async per vari motivi. – user1074057