2016-03-03 11 views
0

Я бы хотел по существу gevent.sleep вести себя как time.sleep в том, что она возвращает выполнение после точно (не по крайней мере) некоторое количество секунд, но позволяют другое Greenlets работать в то же время.Вызов gevent.sleep с тайм-аутом

Пример:

import gevent 
def a(): 
    while True: 
     print "A" 
     gevent.sleep(0.2) 
def b(): 
    gevent.spawn(a) 
    while True: 
     print "B" 
     gevent.sleep(1) 
b() 
# often get more than 10 or 20 'A's for each 'B', would expect close to 5 

Есть ли лучший способ получить желаемое поведение?

ответ

1

Ваш код в порядке. Я побежал на моей Linux машине и был этот вывод:

В А B А B A B A A A A A B B

Так он работает очень надежно на моем конце, работает GEvent 1.0.1 и python2.7. Если это не работает с вашей стороны, вы можете попробовать и обновить python или gevent.

+0

Запуск python 2.7.11 и gevent 1.0.2. Интересно, что после перезапуска python я получаю правильный вывод в первый раз, но проблема, которую я описал после последующих вызовов. – user2561747

+0

Ах это было связано с тем, что он забыл убить Гринлета, запускающего 'a' на' KeyboardInterrupt' – user2561747

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

  • Нет связанных вопросов^_^