tornado协程(s e)

tornado协程基于python的yield关键字实现,所以不能像调用普通函数一样调用协程函数

、from tornado import gen
from tornado.httpclient import AsyncHTTPClient

@gen.coroutine
def coroutine_visit():
	http_client = AsyncHTTPClient()
	print('xxxxxxxxxxxxx')
	response = yield http_client.fetch('www.baidu.com')
	print(response)

@gen.coroutine
def outer_coroutine():
	print("start call another coroutine")
	yield coroutine_visit()

	print("end of outer_coroutine")

outer_coroutine()

from tornado.ioloop import IOLoop 
def func_normal_run_sync():
	print('start to call a coroutine')
	IOLoop.current().run_sync(lambda:coroutine_visit())
	print('end of call a coroutine')

def func_normal_spawn_callback():
	print('start to call a coroutine')
	IOLoop.current().spawn_callback(coroutine_visit())
	print('end of call a coroutine')
# func_normal()

装饰器@gen.coroutetine表明这是一个协程函数,上述代码两个协程函数,他们之间可以通过yield相互调用;

gen是协程库

AsyncHTTPClient是异步IO库

协程函数(网页访问)一般通过三种方式调用:

1.在本身是协程的函数内通过yield调用

2.在IOLoop尚未启动是,通过IOLoop的run_sync()函数调用,run_sync()函数将阻塞当前函数执行直到被调用协程完成,Tornado要求协程函数在IOLoop的running状态被调用,只不过run_sync函数自动完成启动、停止IOLoop的步骤,逻辑为:启动IOLoop--调用被lambda封装的协程函数--停止IOLoop;

3.IOLoop已经启动,通过spawn_callback()函数调用,spawn_callback函数不会等待被调用协程执行完成,所以函数之前之后的print打印都会完成,而被coroutine_visit函数会在合适的时机被调用,而且该函数只能用于调用没有返回值的协程函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值