tornado源码分析(四)之future、gen.coroutine

本文深入探讨Tornado中的Future概念,解释其如何代表异步事件并在事件完成后调用回调函数。接着介绍gen.coroutine装饰器,它简化了异步编程,允许以同步方式编写代码。最后剖析gen.coroutine的实现原理,包括coroutine、Runner.run和Runner.handle_yield的细节。
摘要由CSDN通过智能技术生成

future是什么

在事件驱动编程模型中,会有很多的事件循环,各事件循环在创建异步事件时可以同时创建一个future对象,并将创建的异步事件与该future对象存储在一起,并将所有传入的callback回掉函数存入future中,当异步事件发生后,直接调用future的set_result函数,该函数会调用所有存在future中的回掉函数。

所以future就代表某个时间循环的某个异步事件,它让我们可以动态的向异步事件添加回掉函数。

举例说明:

from tornado.tcpserver import TCPServer
from tornado import gen
from tornado.concurrent import Future


class MyTCPConnection(object):
    def __init__(self, stream, address, server):
        self.stream = stream
        self.address = address
        self.server = server

    def start_serving(self, future=None):
        future = self.stream.read_until("that is all!".encode()) #在iostream中创建了一个异步读事件
        future.add_done_callback(self.message_recived) #在将message_recived作为该事件的回掉函数

    def message_recived(self, future):
        message = future.result().decode()

        if message ==
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值