无回调的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的响应。
不将回调定义为单独函数的回调。那么代码
变得连续且易于阅读。图书馆本身不是一个框架
可用于提供异步工作模式的其他环境
(请参见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的响应。