没有项目描述

aioexec的Python项目详细描述


aioexec

说明

aioexec是围绕concurrent.futures包和asyncio的loop.run_in_executor方法的一个简单、直观的界面。aioexec是leightweight,没有依赖关系和~100 loc。

要求

aioexec需要python>= 3.6

安装

pip install aioexec

pipenv install aioexec

用法

没有aioexec通常运行这样的执行器:

importaysnciofromconcurrent.futuresimportProcessPoolExecutor# ...loop=asyncio.get_event_loop()foo=awaitloop.run_in_executor(ProcessPoolExecutor(1),lambda:my_func(foo='baz'))

使用aioexec也可以这样做:

fromaioexecimportProcs# ...foo=awaitProcs(1).call(my_func,foo='baz')

您可以在同一个执行器中调用一个batch函数,如下所示:

importasynciofromaioexecimportProcs,Call# ...my_values=awaitasyncio.gather(*Procs(3).batch(Call(my_func,foo='bar'),Call(my_func,foo='baz'),Call(my_func,foo='qux'),))

这与理解很好地配合:

importasynciofromaioexecimportProcs,Call# ...my_values=awaitasyncio.gather(*Procs(10).batch(Call(my_func,foo=i)foriinrange(0,10)))

您还可以生成一个pool,并使用同一个执行器进行多个不同的调用:

importasynciofromaioexecimportProcs,Call# ...withProcs(10)aspool:value_a=awaitpool.call(my_func,foo='baz')value_b=awaitaio.gather(*pool.batch(Call(my_func,foo=i)foriinrange(0,10)))# etc...

上面的例子同样适用于Threads,例如:

fromaioexecimportThreads# ...foo=awaitThreads(1).call(my_func,foo='baz')

如有必要,您可以将事件loop传递给执行者,如下所示:

foo=awaitThreads(1,my_loop).call(my_func,foo='baz')foo=awaitProcs(1,my_loop).call(my_func,foo='baz')

开发/测试

克隆repo并安装开发包:

pipenv install --dev

运行测试:

pipenv run python make.py test

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java子类在构造函数中少取1个参数   arraylist在java中使用堆栈将对象添加到数组列表中   java如何使用扫描仪或缓冲读取器读取输入文件,并统计输入文件中出现的所有特定字符   java围绕其中心逆时针旋转2D数组,同时保持数组大小   java输入后,println不会输出任何内容   java未知HK2故障多重异常   SimplePath中字段的java Querydsl 4 StringExpression   循环遍历java代码中的多个集合   socket inputstream在使用BOX java sdk时损坏   java什么是面颊新闻活动?   列出比较多个整数并查找java中的最大整数   用户权限如何获得在java中Windows vista/7的C驱动器中打开目录的管理权限   范围内最大/最小值的java数据结构   文件如何使用Java下载和解压缩zip存档?   JavaSpring动态原型bean   类似于云浏览的java应用程序   java无法联系localhost:8005。关闭Tomcat时,Tomcat可能未运行错误