2017-08-31 3 views
0

J'utilise Python multitraitement comme ceci:Python multitraitement n'asynchron

pool = mp.Pool(processes=mp.cpu_count()) 
num_jobs = 5 

print("Start Multiprocessing with: " + str(mp.cpu_count()) + " processes and " + str(num_jobs) + " jobs") 

for i in range(num_jobs): 
    start = int(...) 
    end = int(...) 
    result = pool.apply_async(worker, args = (parameter1, start, end,), callback = callback_function) 
    result.get() 

result = pool.apply_async(worker2, args = (parameter1, parameter2,), callback = callback_function2) 
result.get() 

pool.close() 
pool.join() 

Dans mes fonctions de travail j'imprimer aime STH:

def worker(parameter1, start, end): 

    for in_idx in range(0,100) 
     print(in_idx) 

Cependant, les travailleurs sont appelés segmentaire plutôt que de manière asynchrone. Quel est le problème ici? Des idées?

+0

vous avez 'result.get' dans la boucle. – mgilson

+0

Est-ce un problème? J'en avais besoin pour des raisons de débogage? Ai-je besoin de le supprimer ou pouvez-vous fournir une solution sans le supprimer? @mgilson – thigi

+1

get() par défaut bloque jusqu'à la fin. – jordanm

Répondre

0

Comme @jordanm dit:

get() par des blocs par défaut jusqu'à la fin.