我正在使用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)