Kosztowało mnie to całą noc, aby debugować mój kod, iw końcu znalazłem ten podchwytliwy problem. Proszę spojrzeć na kod poniżej.Jak działa funkcja wywołania zwrotnego w wieloprocesorowym pythonie map_async
from multiprocessing import Pool
def myfunc(x):
return [i for i in range(x)]
pool=Pool()
A=[]
r = pool.map_async(myfunc, (1,2), callback=A.extend)
r.wait()
myślałem, że chciałbym dostać A=[0,0,1]
, ale wyjście jest A=[[0],[0,1]]
. Nie ma to dla mnie sensu, ponieważ jeśli mam A=[]
, A.extend([0])
i A.extend([0,1])
, otrzymam A=[0,0,1]
. Prawdopodobnie callback działa w inny sposób. Więc moje pytanie brzmi, jak uzyskać A=[0,0,1]
zamiast [[0],[0,1]]
? Z góry dziękuję za wszelkie uwagi.
Jakiego systemu operacyjnego i wersji Pythona używasz? –