AIOPools 实现 Python AsyncIO 协程池

2023-04-30 17:44:51   Cyberbolt

AIOPools 是 Python AsyncIO Semaphore 的包装器,用于构建 AsyncIO 协程池。类似于 concurrent.futures 的 ThreadPoolExecutor (线程池) 和 ProcessPoolExecutor (进程池),旨在使 Python 代码达到最高并发数。

安装方法

环境要求:Python 3.8 及以上

1.进入命令窗口,创建虚拟环境,依次输入以下命令

Linux 和 macOS:

python3 -m venv venv # 创建虚拟环境
. venv/bin/activate # 激活虚拟环境

Windows:

python -m venv venv # 创建虚拟环境
venv\Scripts\activate # 激活虚拟环境

2.安装 AIOPools,依次输入

pip install --upgrade pip
pip install aiopools

链接

最简示例

'''
    该示例的协程任务数总计 100 个,设置最大允许的协程数 maxio 为 20,则需要运行 5 次才能完成。
'''

import asyncio
from aiopools import AsyncPool


async def block_io(i):
    await asyncio.sleep(1)
    print(i)
    return i


async def main():
    # 设置最大允许的协程数 maxio
    async with AsyncPool(maxio=20) as pool:
        tasks = [pool.create_task(block_io(i)) for i in range(100)]
    
    response = await asyncio.gather(*tasks)
    print(response)
    

if __name__ == '__main__':
    asyncio.run(main())