Map_async() işlevini kullanırken geri aramalarıma çalışmam görünmüyor. Ben bunun yerine array_flowers() yoluyla görevleri eklemek için biraz değiştirilmiş kod kullandığımda çalışır. belgelerine ben map_async ile geri aramalar() kullanmak mümkün olmalıdır görünüyor ama çalıştırdığınızda belki onun newb çeşit hata ...Çok işlemcili Python geri arama.pools.map_async çalışmıyor?
from multiprocessing import Pool,TimeoutError
from time import sleep
servers=["s1","s2","s3","s4","s5","s6"]
def f(x):
print("start f(" + x + ")")
sleep(5)
print("end f(" + x + ")")
return "did " + x
def mycallback(x):
print("My callback " + str(x))
def myerrorcallback(r):
print("My errorcallback " + str(r))
if __name__ == '__main__':
pool = Pool(processes=4)
results = pool.map_async(f, servers, chunksize=1, callback=mycallback, error_callback=myerrorcallback)
print(results.get(timeout=11))
alıyorum:
D:\python> f.py
start f(s1)
start f(s2)
start f(s3)
start f(s4)
end f(s1)
start f(s5)
end f(s2)
start f(s6)
end f(s4)
end f(s3)
end f(s5)
end f(s6)
['did s1', 'did s2', 'did s3', 'did s4', 'did s5', 'did s6']
ı kullandığınızda apply_async() ile değiştirilmiş kod yerine, çıktıları geri aramalardan alırım. Bir şans aldı ve bunun için bir hata günlüğe
D:\python\>fb.py
start f(s1)
start f(s2)
start f(s3)
start f(s4)
end f(s1)
start f(s5)
My callback did s1
end f(s2)
My callback did s2
start f(s6)
end f(s3)
My callback did s3
end f(s4)
My callback did s4
end f(s5)
My callback did s5
end f(s6)
My callback did s6
Ben senin çıkışını yeniden olamaz, bu "My geri arama [, 's3 yaptılar' 's2 yaptım' 's1 yaptım', 's4 vermedi' 's5 yaptım' fazladan bir satır sonucu benim makinede 's6' yazmış]. "Değiştirilmiş" kodunuzu gönderebilir misiniz? – del
Hangi sürüm python? Pencerelerde 3.3 kullanıyorum. – Bbb
Ayrıca çalışmamın kodunu eklemek için sorumu düzenledim. – Bbb