asyncio队列有延迟

时间:2015-10-01 17:35:53

标签: python queue delay coroutine

我正在使用Python 3.4,并且正在尝试为协同程序找出正确的“call_later”方法。具体来说,我正在尝试将asyncio.Queue.put(这是一个协程)与asyncio.BaseEventLoop.call_later一起使用。这不起作用,因为call_later只允许回调而不是协同程序。我无法找到一个内置函数来表现得像协同程序的call_later。这就是我最终为解决我的问题而做的事情,但它似乎并不是很有说服力。有没有更好的方法来做我想做的事情?

@asyncio.coroutine
def func(self):
    data = self.queue.get()
    try:
        #do some stuff
    except Exception as e:
        logger.warn(e)

        @asyncio.coroutine
        def queue_put_delay(data):
            yield from asyncio.sleep(self.retry_delay)
            yield from self.queue.put(data)

        asyncio.async(queue_put_delay(data), loop=self.loop)
    finally:
        #do some stuff
        asyncio.async(func(), loop=self.loop)

0 个答案:

没有答案