Я проходил Gevents (библиотека python для функциональности asych) и написал очень маленькую программу, чтобы понять, как она работает, но результаты оказались весьма озадачивающими. Ниже приведен код
import gevent
import time
def mytime(t):
time.sleep(t)
print " i have slept for ",t,"secs"
x = range (0,10)
x.reverse()
for i in x :
jobs = [ gevent.spawn(mytime , i) ]
gevent.joinall(jobs)
На выходе, сколько бы раз я не запускал, я получаю
i have slept for 9 secs
i have slept for 8 secs
i have slept for 7 secs
i have slept for 6 secs
i have slept for 5 secs
i have slept for 4 secs
i have slept for 3 secs
i have slept for 2 secs
i have slept for 1 secs
i have slept for 0 secs
Есть похожий пример, представленный как часть gevent tutorials.
где функциональность asynch довольно очевидна. Все, что я сделал, это добавил в код функцию sleep. Не должен ли вывод быть примерно таким?
i have slept for 6 secs
i have slept for 8 secs
i have slept for 5 secs
i have slept for 9 secs
i have slept for 7 secs
i have slept for 0 secs
i have slept for 3 secs
i have slept for 2 secs
i have slept for 1 secs
i have slept for 4 secs