2014-12-18 2 views
3

Я довольно новый с eventlet и задаю некоторые вопросы во сне()Что делает greenthread.sleep делать?

Я проверил с небольшим фрагментом кода.

Сначала я породил 3 greenthreads, а затем вызвал greenthread.sleep (0), после чего эти 3 greenthreads пришли для выполнения функций в них. что происходит?

does 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 имеет определенную гарантию, что если вы вызываете спящий режим, вызывающий greenthread не будет продолжаться до тех пор, пока все остальные greenthreads , готовые выполнить, не закончатся или не пришли в аналогичное состояние ожидания. Начнем с подробностей реализации, теперь мы сохраняем его как публичный API: позвоните sleep(0), чтобы другие могли работать.

+1

ваш ответ довольно ясный, thx! –

Смежные вопросы