2017-10-18 15 views
0

J'utilise le composant de rappel de multiprocessing.Pool comme ceci:Pourquoi list.extend est-il ajouté dans cette situation?

def foo(x): 
    err = [] 
    return err 

errors = [] 
res = pool.map_async(foo, mylist, callback=errors.extend) 

print errors 

Et je reçois:

[[]] 

Si je joins une erreur de test à l'erreur à l'intérieur de foo(), je reçois ce :

[['test']] 

Des idées que je manque ici?

Pourquoi ne pas reflètent ce comportement:

a = [] 
b = [] 
a.extend(b) 
print a 

Résultats:

[] 
+0

Je ne peux pas reproduire vos résultats. Quand je cours le code en haut (avec un peu de passe-partout pour le faire fonctionner), j'obtiens une liste vide comme résultat. Je reçois ceci dans les deux Python 3.6 (après avoir changé l'appel 'print') et dans 2.7. – Blckknght

Répondre

0

Je ne peux pas commenter, donc je poste une réponse. pool.map_async renverra une liste, appelez-le Résultat. Votre fonction de rappel s'applique à ce résultat. Dans votre cas, Résultat est [[err0], [err1], ...], donc error.extend (Résultat) obtient [[]]. Essayez ceci:

def foo(x): 
    err = something 
    return err 

errors = [] 
res = pool.map_async(foo, mylist, callback=errors.extend) 
# or 
# res.wait() 
# print res.get() 
print errors