标准多处理模块的异步版本
aiomultiprocess的Python项目详细描述
多进程
将现代python代码库提升到性能的下一个级别。
异步和多处理本身很有用,但有限: 异步仍然不能超过gil的速度,而且多处理只能在 一次一个任务。但在一起,他们可以充分发挥自己的真正潜力。
aiomultiprocess提供一个简单的接口,同时运行一个完整的异步事件 在每个子进程上循环,启用前所未有的并发级别 在python应用程序中。每个子进程可以执行多个协程 同时,仅受工作负载和可用核心数的限制。
在几秒钟内收集数万个网络请求非常简单:
asyncwithPool()aspool:results=awaitpool.map(<coroutine>,<items>)
有关更多内容,请观看Pycon US 2018讨论所有最终过程, "Thinking Outside the GIL":
幻灯片可在Speaker Deck找到。
安装
aiomultiprocess需要python 3.6或更新版本。 您可以从pypi安装它:
$ pip3 install aiomultiprocess
用法
大多数aiomultiprocess在任何时候都模仿标准的多处理模块 可能的,同时考虑从异步功能中受益的地方。
对子进程执行协同程序非常简单:
importasynciofromaiohttpimportrequestfromaiomultiprocessimportProcessasyncdefput(url,params):asyncwithrequest("PUT",url,params=params)asresponse:passasyncdefmain():p=Process(target=put,args=("https://jreese.sh",{}))awaitpasyncio.run(main())
如果您想从协同程序中获得结果,Worker
将使其可用:
importasynciofromaiohttpimportrequestfromaiomultiprocessimportWorkerasyncdefget(url):asyncwithrequest("GET",url)asresponse:returnawaitresponse.text("utf-8")asyncdefmain():p=Worker(target=get,args=("https://jreese.sh",{}))response=awaitpasyncio.run(main())
如果您想要一个受管理的工作进程池,那么使用Pool
:
importasynciofromaiohttpimportrequestfromaiomultiprocessimportPoolasyncdefget(url):asyncwithrequest("GET",url)asresponse:returnawaitresponse.text("utf-8")asyncdefmain():urls=["https://jreese.sh",...]asyncwithPool()aspool:result=awaitpool.map(get,urls)asyncio.run(main())
许可证
aiomultiprocess是版权所有的John Reese,并根据
麻省理工学院的执照。我在一个开放的
来源许可证。这是我的个人存储库;您收到的许可证
我的密码是我写的,不是我老板写的。有关详细信息,请参见LICENSE
文件。