Tengo un script que incluye abrir un archivo de una lista y luego hacer algo con el texto dentro de ese archivo. Estoy usando el multiproceso de Python y Pool para tratar de paralelizar esta operación. Una abstracción del guión es el siguiente:multiproceso de python apply_async solo usa un proceso
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()
Cuando ejecuto esto la impresión de la identificación del proceso es el mismo para cada iteración. Básicamente, lo que trato de hacer es tomar cada elemento de la lista de entrada y bifurcarlo en un proceso separado, pero parece que un proceso está haciendo todo el trabajo.
O quizás simplemente 'map' si vas a' resultados .get() 'de inmediato. – mgilson
Agradezco la respuesta, pero trato de seguir con apply_async por varias razones. – user1074057