1
我修改了示例队列,生产者&消费者来自这个Tornado documentation,但它似乎并没有传递给get()的超时参数可以工作,因为消费者不会等待10抛出异常之前的几秒钟。理想情况下,生产者和消费者将同时运行。另外,我不知道是否在超时参数为秒或毫秒传:龙卷风异步队列不等待
from tornado import gen
from tornado.ioloop import IOLoop
from tornado.queues import Queue
q = Queue()
@gen.coroutine
def consumer():
try:
while True:
item = yield q.get(timeout=10000)
try:
print('Doing work on %s' % item)
finally:
q.task_done()
except gen.TimeoutError:
print('timeout')
return
@gen.coroutine
def producer():
for item in range(5):
yield q.put(item)
print('Put %s' % item)
yield gen.sleep(2)
@gen.coroutine
def main():
# Start consumer without waiting (since it never finishes).
IOLoop.current().spawn_callback(consumer)
yield producer() # Wait for producer to put all tasks.
yield q.join() # Wait for consumer to finish all tasks.
print('Done')
IOLoop.current().run_sync(main)
,这里是它的执行:
Put 0
Doing work on 0
timeout
Put 1
Put 2
Put 3
Put 4