无回调的python异步调用调度程序

adisp的Python项目详细描述


adisp是一个允许使用异步调用和
不将回调定义为单独函数的回调。那么代码
变得连续且易于阅读。图书馆本身不是一个框架
可用于提供异步工作模式的其他环境
(请参见proxy_example.py中的Tornado服务器示例)。

用法:

组织呼叫代码

所有的魔术都是用python 2.5装饰器完成的,它允许控制流
离开一个函数,做一些其他的事情,然后返回到
调用带有结果的函数。所以进行异步调用的函数
应该是这样的:

@过程
定义我的处理器():
响应=产生一些异步函数()
数据=解析响应(响应)
结果=产生一些其他异步函数(数据)
存储结果(结果)

每个“yield”都是函数返回的地方,让它周围的框架
做好本职工作。“yield”后面的代码通常是回调中的代码。

在这样的函数周围需要@process decorator。它使它成为可调用的
作为一个普通函数,负责将回调调用分派回
它。

编写异步函数

在上面的示例中,函数“some_async_func”和“some_other_async_func”
是那些实际运行异步进程的进程。他们应该跟着两个
条件:

-接受带有回调函数的“callback”参数
异步进程完成后
-应使用一个参数调用回调——结果
-包装在@async decorator中

@async decorator使函数调用变懒,允许@process
调用它以提供要调用的回调。

使用async with@-语法在编写自己的语法时最方便
异步函数(并且可以将回调参数命名为
“回拨”)。但是当你想调用某个库函数时,你可以把它包装起来
异步到位。

调用http.fetch(url,callback=callback)
结果=产生异步(http.fetch)

调用http.fetch(url,cb=safewrap(callback))
result=yield async(http.fetch,cbname='cb',cbwrapper=safewrap)(url)

这里您可以使用两个可选的异步参数:

-`cbname`:函数需要回调的参数的名称
-`cbwrapper`:将在之前应用的回调ISelf的包装
称之为

连锁电话

@异步函数也可以是@process,这样可以有效地链接
异步调用,因为它可以用普通函数完成。在这种情况下
@async decorator shouold是外部的:

@异步
@过程
def async_调用其他异步(arg,回调):
..

多个异步调用

库还允许并行调用多个异步函数
立即获取所有结果以进行处理:

@异步
def async_http_get(url,回调):
异步获取URL
结束时调用回调(响应)

@过程
def get_stat():
url=['http://…/','http://…/',…]
响应=收益率映射(异步http、url)

在*all*之后,异步调用将完成'responses'将是
对应于给定URL的响应。

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

推荐PyPI第三方库


热门话题
java 安卓 XMLPullParser错误   Java响应网格布局   Java中使用递归的不同方法   java变量可能尚未初始化(边加权图)   java如何将这样的文件插入MySQL数据库   java云端点:不允许实体类型的数组或集合   java(编译器或jvm)是否以不同方式处理类的静态最终成员?如果是,怎么做   java如何从lambda表达式返回新的非抽象映射?   java JDK 7支持的最大Spring版本是什么   我们如何从java类生成DTD   java在我的例子中BindingResult、FieldErrors或GlobalErrors是否可以为null?   java[LibGDX][GWT]读取文件外观时出错。HTML格式的json[序列化异常]   字典Java不可修改密钥集映射   java Admob在firebase sdk之后显示测试广告,但不显示真实广告