gpt4 book ai didi

python - 如何使这个队列并行?

转载 作者:行者123 更新时间:2023-12-01 07:46:48 27 4
gpt4 key购买 nike

我这里有一个队列示例(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com