我这里有一个队列示例(Python+Tornado框架):https://www.tornadoweb.org/en/stable/queues.html
现在它是一个顺序队列。如何使其平行?
由于我现在还没有完全理解tornado.queues,所以我不清楚应该如何更改代码来实现并行队列。
from tornado import gen
from tornado.ioloop import IOLoop
from tornado.queues import Queue
q = Queue(maxsize=2)
async def consumer():
async for item in q:
try:
print('Doing work on %s' % item)
await gen.sleep(0.01)
finally:
q.task_done()
async def producer():
for item in range(5):
await q.put(item)
print('Put %s' % item)
async def main():
# Start consumer without waiting (since it never finishes).
IOLoop.current().spawn_callback(consumer)
await producer() # Wait for producer to put all tasks.
await q.join() # Wait for consumer to finish all tasks.
print('Done')
IOLoop.current().run_sync(main)
我希望所有工作同时开始,然后同时完成,而不是一项一项地完成任务。
非常感谢!
最佳答案
您需要做的就是生成多个消费者任务:
for i in range(num_consumers):
IOLoop.current().spawn_callback(consumer)
然后每个消费者将能够从队列中读取并并行等待事物。 (请注意,由于 Tornado 是单线程的,因此任何不使用 await
的内容都会阻塞所有内容)
关于python - 如何使这个队列并行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56425093/