Mam poniżej fragment kodu, który tworzy kilka wątków, aby wykonać zadanie, które działa doskonale na własną rękę. Jednak staram się zrozumieć, dlaczego instrukcje drukowania, które wywołuję w mojej funkcji, nie są wykonywane, dopóki wszystkie wątki nie zakończą się i nie zostanie wywołana instrukcja print 'finished'
. Oczekuję, że zostaną wywołani podczas wykonywania wątku. Czy istnieje prosty sposób, aby to osiągnąć i dlaczego to działa w ten sposób?Wielowątkowe instrukcje drukowania w Pythonie są opóźnione do momentu zakończenia wszystkich wątków.
def func(param):
time.sleep(.25)
print param*2
if __name__ == '__main__':
print 'starting execution'
launchTime = time.clock()
params = range(10)
pool=multiprocessing.Pool(processes=100) #use N processes to download the data
_=pool.map(func,params)
print 'finished'
Tylko myślałem, że podkreślić, że jest to [Duplikat] (http://stackoverflow.com/ pytania/12622365/problems-mixing-threads-processes-in-python) innego (nieodebranego) pytania zadawanego tutaj na SO, ale o wiele mniej zagraconego. – Hawkwing
Czy masz na myśli, że wszystkie odbitki pojawiają się od razu, lub ich oczekiwana kolejność jest odwrócona? Jeśli pójdą w tym samym czasie to prawdopodobnie system buforuje. Jeśli zamówienie jest odwrócone, jest bardziej interesujące. – luk32
Obie rzeczy, właściwie. Instrukcje drukowania pojawiają się wszystkie po wydrukowaniu "finshed". – Hawkwing