Что делает greenthread.sleep?
Я довольно новичок в eventlet и у меня есть вопросы по сну ()
Я протестировал с небольшим куском кода.
Сначала я породил 3 greenthreads, а затем вызвал greenthread.sleep(0), затем все эти 3 greenthreads пришли для выполнения функций в них. в чем дело?
значит sleep() означает выполнить все порожденные greenthread? что означает аргумент 0, который мы передали?
Вот код:
import eventlet
from eventlet import greenthread
from eventlet import event
evt = event.Event()
def func1():
print "starting func1"
evt.wait()
print "stopping func1"
def func2():
print "starting func2"
evt.wait()
print "stopping func2"
def func3():
evt.send()
gt1 = greenthread.spawn(func1)
gt2 = greenthread.spawn(func2)
gt3 = greenthread.spawn(func3)
greenthread.sleep(0)
1 ответ
Это отличный вопрос, он заслуживает особого места в документации Eventlet.
eventlet.sleep(0)
переназначает вызывающий greenthread в конец очереди выполнения. Если были какие-то другие greenthreads, ожидающие запуска, они будут выполнены сейчас.
Детали текущей реализации Eventlet имеют определенную гарантию того, что если вы вызываете sleep, вызывающий greenthread не будет продолжаться до тех пор, пока все остальные greenthread , которые готовы к выполнению, не будут завершены или не перейдут в аналогичное состояние ожидания. Начали с подробностей реализации, теперь мы держим его как публичный API: call sleep(0)
чтобы позволить другим бежать.