使函数异步的简单模块

asynchronizer的Python项目详细描述


asynchronizer是一个简单的模块,可用于异步运行多个函数。要转换函数,只需向函数添加装饰符@asynchronize。此项目仍在开发中,因此请报告任何错误here。例如,请参见examples folder

Requirements

  • python 2.xpython 3.x

Installation

asynchronizer可以使用pip安装:

pip install asynchronizer

How to use

Basic use

假设您有这样一个函数:

importrequestsdefsend_requests():r=requests.get('http://httpbin.org/get')printr.status_codefor_inrange(20):send_requests()

您可以这样修改以使其异步:

importrequestsfromasynchronizerimportasynchronize,Wait@asynchronizedefsend_requests():r=requests.get('http://httpbin.org/get')printr.status_codefor_inrange(20):send_requests()Wait()

Example Script:

此示例脚本正常运行需要55秒,但异步运行时仅需10秒

importtimefromasynchronizerimportasynchronize,Wait,setWorkers@asynchronizedeffunc(i):time.sleep(i)printiforiinrange(1,11):func(i)Wait()

Things to keep in mind

  • 函数Wait()是必需的。如果Wait()不存在,则脚本将结束,而不等待任何未完成的函数完成。

  • 函数Wait()也是一个阻塞函数,这意味着脚本的执行将在此处暂停,直到在完成此操作之前调用所有异步函数。这就是为什么通常应该在脚本末尾添加它

  • 修饰后的函数彼此异步,但函数内部的代码是同步的,这意味着这是错误的:

    # wrong way@asynchronizedefsend_requests():for_inrange(20):r=requests.get('http://httpbin.org/get')send_requests()

    这是正确的方法:

    # correct way@asynchronizedefsend_requests():r=requests.get('http://httpbin.org/get')for_inrange(20):send_requests()
  • 不要从函数返回值,而是将它们发送到回调。例如:

    @asynchronizedefsend_requests():r=requests.get('http://httpbin.org/get')parse(r.text)# instead of return r.text

Advanced use

  • 如果要使用自定义数量的工作线程,只需在脚本开头添加setWorkers(n),其中n是所需的并发greenlet线程数。默认值为32。
  • 若要为特定函数调用分配优先级,请将priority=n添加到函数调用的参数中,其中n是要设置的优先级。例如:func(param1,param2,param3,priority=2)

Contributing

如果您想参与这个项目,可以随时向Github发送一个请求

要报告任何错误或请求新功能,请转到Issues

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

推荐PyPI第三方库


热门话题
java Spring数据JPA+Hibernate在不首先找到父实体的情况下保存子实体   php Java:如何从CLI接收命令   spring为java中的导出数据创建访问文件   java在Windows 8.1上安装Play Framework   java Spring启动白标签错误页面(类型=未找到,状态=404)   java如何在单击时从数组中绘制?   java fn:substringAfter()上次出现   java在IFR语句中使用方法返回   java onPause()或onStop()的名称   对关联对象的关联对象具有条件的java HQL查询   java只打印一次总值,无需迭代   java如何使用抽象Uri buildOn()方法?   如何在Java中执行sudo命令并获得错误输出?   java反射:避免对getConstructor(类<?>…)的未经检查的警告调用作为原始类型类的成员   Java:如何从类中创建的对象调用类方法?   java如何在电子邮件中嵌入图像?   java如何在Android上启用详细GC?   java什么是串行版本id?