python 使用tornadio书写接口(二)-异步调用接口

最近看了一下tornadio异步调用的功能,做一个小总结,ps:有一些很好的文章我会把链接放到最后,供大家参考。

简单说一下我理解的同步和异步的概念,同步和异步指的调用方而言就是http请求中对应request。

同步:是我调用一个接口,服务端要做处理,处理完成后给我返回response,这等待response过程中我是不做任何处理的,挂起状态。

异步:同理我调用一个接口发起一个request1,服务端做一些处理,在这个等待过程中我可以继续发起其他参数的请求request2,当服务端处理完成后会回调发起者或者发起者轮询看看服务端处理完成没有(我觉得轮询比较高大上的,但是tornadio的asyn

chronous装饰器是采用回调callback的形式)。

阻塞和非阻塞就是指服务端处理方是只能处理单一请求(我理解线性请求一个完事在处理另一个)还是可以同时处理多个。(ps:阻塞和非阻塞我理解就是对应http请求的response)

按照这种我可以4种形式,同步阻塞,同步非阻塞,异步阻塞(这种经典IO形式吧),异步非阻塞。

目前我就看一下client的异步调用。tornadio异步调用可以使用装饰器就可以完成需求,一共两个asynchronous和coroutine两个类就可以实现。如图:

1.使用asynchronous装饰器完成异步调用:

图片中有对应标记,我刚开始比较难理解就是on_response()方法为什么会有一个response参数,当然我还没有看源码,大体猜的在fetch()方法这块没有看懂不知道什么时候吧on_response()方法的response参数传进去,后面我再看看。

异步调用结果如图:

这里面有一点要说的就是on_response()方法中最后一定要调用on_finish()方法,来结束,如果不调用on_finish()方法会一直没有返回结果,一直pending中。ps:之前我调试的时候就忘记了,后面一直没有返回,找了很久哪里不对,最后发现没有写on_finish()

2.使用coroutine完成异步调用:

功能都是一样的有一点就是必须要使用yield来调用生成器,来完成异步调用,结果也和上图结果一致。

总结:asynchronous装饰器和coroutine装饰器,却别在于asynchronous需要有一个回调函数在回调函数中可以做一些处理并且回调函数需要用on_finish()作为结束标志。coroutine不需要回调函数但是需要yield来生成请求。

参考链接:

博客

简书地址

知乎

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值