您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python asyncio:处理潜在的无限列表

Python asyncio:处理潜在的无限列表

我的情况是关于通过传送带将数据流传输到消费者。我还可以做些什么?

您可以创建固定数量的任务,这些任务大致与传送带的容量相对应,然后将它们弹出队列。例如:

async def consumer(queue):
    while True:
        line = await queue.get()
        # connect to API, Mongo, etc.
        ...
        queue.task_done()

async def producer():
    N_TASKS = 10
    loop = asyncio.get_event_loop()
    queue = asyncio.Queue(N_TASKS)
    tasks = [loop.create_task(consume(queue)) for _ in range(N_TASKS)]
    try:
        with open('input') as f:
            for line in f:
                await queue.put(line)
        await queue.join()
    finally:
        for t in tasks:
            t.cancel()

由于与线程不同,任务是轻量级的,并且不占用操作系统资源,因此最好在创建“太多”任务时犯错。asyncio可以毫不费力地处理成千上万的任务,尽管这对于这些任务来说可能是过大的事- 几十就足够了。

python 2022/1/1 18:26:51 有178人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶