twisted之defer延迟

本文介绍使用Twisted框架中的Defer实现异步处理耗时任务的方法,并提供了一个简单的Python示例。通过将耗时任务放入子线程并利用回调函数处理结果,实现了流程的高效运行。

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

更多内容请访问我的个人博客www.tenliu.top

twisted之defer

工作中一项目,其中一个环节比较耗时,又无法解耦合,流程中下一环节必须等待这个环节结果。由此想到异步框架twisted的延迟defer,之前只是知道有这么个东西。

defer就是使耗时的任务暂时迅速返回一个deferred对象,让流程可以继续执行下去,不再这里耗费时间。而耗时任务则在子线程执行,结果通过回调函数处理。

网上相关知识不少,但很少有一个代码实例,可以一目了然的说明这个事情

#!/usr/bin/env python
# encoding: utf-8
from twisted.internet import reactor, defer, threads
import time

def CostTimeWork(x):
    '''
    这是一个耗时的任务
    '''
    for i in xrange(3):
        print("cost time:%s\t%s" % (i,x))
        time.sleep(1)
    return x

def PrintData(res):
    '''
    回调函数,打印结果
    当耗时任务结束后,想要如何对结果进行处理,就要用到回调。
    我这里只是简单打印结果而已
    '''
    print res

def main():
    '''
    主函数
    执行结果:打印1之后,不在等待 耗时的2执行完成,继续向下执行3
    2完成之后执行回调,进行处理即可
    '''
    print "====1==="
    #将耗时函数 放入另一个线程实行,返回一个deferred对象
    d = threads.deferToThread(CostTimeWork,"====2===")
    #添加回调函数
    d.addCallback(PrintData)
    print "====3==="

if __name__=="__main__":
    main()
    reactor.run()

>>>>>>>>>>>>>>>>执行结果>>>>>>>>>>>>>>>>
====1===
====3===
cost time:0 ====2===
cost time:1 ====2===
cost time:2 ====2===
====2===

CostTimeWork就是你的耗时任务
PrintData 是你对耗时任务完成后的操作
main是主流程

更多内容请访问我的个人博客www.tenliu.top

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值