从 async_call_method() 开始探索

本文从tornado官方文档出发,探讨了Future在异步编程中的作用,然后深入研究了`async_call_method()`的来源,发现它源自github.com/snower/TorMySQL项目。通过分析`tormysql.client.connect()`和`self._connection.connect()`,揭示了异步MySQL操作的实现原理。最后,总结了实现非阻塞特性的关键条件,强调了non-blocking socket的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from tornado.concurrent import Future

def async_call_method(fun, *args, **kwargs):
    future = Future()
    // 定义一个闭包 finish
    def finish():
        try:
            result = fun(*args, **kwargs)
            if future._callbacks:
                IOLoop.current().add_callback(future.set_result, result)
            else:
                future.set_result(result)
        except:
            if future._callbacks:
                IOLoop.current().add_callback(future.set_exc_info, sys.exc_info())
            else:
                future.set_exc_info(sys.exc_info())
    child_gr = greenlet.greenlet(finish)
    child_gr.switch()
    return future

tornado 相关官方文档

Future 是一种用于并发编程的模式,首次引入是在 python 3.2 的 concurrent.futures 模块。

Future 对象是一个对于异步返回结果的占位符。

一个 Future 对象包含了一次异步操作的结果。在同步编程中,Futures 被用于等待从一个线程池或进程池里返回的结果;在 tornado 中,future 通常被用在 IOLoop.add_future 或者在一个 gen.coroutine 函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值