2013-09-17 2 views
0

Я использую web2py для проекта и обнаружил, что gevent.sleep, кажется, висит в неожиданных разъединениях. Я предполагаю, что это связано с неправильным обработкой исключения. Я не могу найти его правильно написанным в документации, как мне улавливать, связывать или отслеживать исключения из gevent.sleep()?Как поймать/контролировать/связывать gevent.sleep() исключения

Заранее спасибо.

ответ

0

Странное предположение, возможно, это неправильно. sleep() приостанавливает текущий Greenlet и возобновляет следующий, ожидающий, Greenlet. Скорее всего, это следующий Geenle, который запускается после sleep(), который блокирует выполнение.

Если вы не видите распечатку трассировки, это не происходит из-за сна().

Исходный код функции сна:

def sleep(seconds=0): 
    """Put the current greenlet to sleep for at least *seconds*. 

    *seconds* may be specified as an integer, or a float if fractional seconds 
    are desired. 

    If *seconds* is equal to or less than zero, yield control the other coroutines 
    without actually putting the process to sleep. The :class:`core.idle` watcher 
    with the highest priority is used to achieve that. 
    """ 
    hub = get_hub() 
    loop = hub.loop 
    if seconds <= 0: 
     watcher = loop.idle() 
     watcher.priority = loop.MAXPRI 
    else: 
     watcher = loop.timer(seconds) 
    hub.wait(watcher)