跳转到主要内容

标准multiprocessing模块的AsyncIO版本

项目描述

aiomultiprocess

将现代Python代码库的性能提升到新的水平。

version documentation changelog license build status code coverage code style

单独来看,AsyncIO和multiprocessing都有用,但有限:AsyncIO仍然无法超过GIL的速度,而multiprocessing一次只能处理一个任务。但结合使用,它们可以充分发挥其真正潜力。

aiomultiprocess提供了一个简单的接口,同时在每个子进程中运行完整的AsyncIO事件循环,使得Python应用程序中从未见过的高并发级别成为可能。每个子进程可以同时执行多个协程,仅受工作负载和可用核心数量的限制。

在几秒钟内收集数以万计的网络请求就像这样简单

async with Pool() as pool:
    results = await pool.map(<coroutine function>, <items>)

安装

aiomultiprocess需要Python 3.6或更高版本。您可以从PyPI安装它

$ pip3 install aiomultiprocess

用法

大多数情况下,aiomultiprocess尽可能模仿标准multiprocessing模块,同时考虑到可以利用异步功能的地方。

在工作进程池上运行您的异步任务很容易

import asyncio
from aiohttp import request
from aiomultiprocess import Pool

async def get(url):
    async with request("GET", url) as response:
        return await response.text("utf-8")

async def main():
    urls = ["https://noswap.com", ...]
    async with Pool() as pool:
        async for result in pool.map(get, urls):
            ...  # process result
            
if __name__ == '__main__':
    # Python 3.7
    asyncio.run(main())
    
    # Python 3.6
    # loop = asyncio.get_event_loop()
    # loop.run_until_complete(main())

有关更多详细信息和使用示例,请参阅用户指南

有关进一步背景,请观看2018年PyCon US关于aiomultiprocess的演讲,《跳出GIL的思考

IMAGE ALT TEXT

幻灯片可在演讲者板上找到。

许可证

aiomultiprocess版权所有Amethyst Reese,并许可在MIT许可证下。我在此存储库中向您提供的代码是在开源许可证下提供的。这是我的个人存储库;您收到的我的代码许可是由我而非我的雇主提供的。有关详细信息,请参阅LICENSE文件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

aiomultiprocess-0.9.1.tar.gz (24.5 kB 查看哈希值)

上传时间 源代码

构建分发

aiomultiprocess-0.9.1-py3-none-any.whl (17.5 kB 查看哈希值)

上传时间 Python 3

由以下机构支持