Python使用装饰器实现多线程功能

本文介绍如何在Django中使用线程池技术,通过`background_thread`装饰器实现后台任务的异步执行,降低主线程阻塞,提高用户体验。重点讲解了如何处理长耗时功能,以及如何避免返回值问题,保持代码的解耦性。

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

使用场景:在你调用一个函数,但仅仅只想使其在后台执行,并且降低耦合性,可以使用此方法:
具体场景:例如:Django调用站点后台一个长耗时功能/方法时(如数据处理),可以使用;使用该方法,情形可能为Django和站点后台由不同人员开发;
# 关于返回值问题:一般使用数据库或其它方式获取,后台线程基本都是封装一个相对独立的功能块;

def background_thread(func):
    def callf(*args, **kwargs):
        # args=(*args,)正常 kwargs=kwargs 未验证
        t = threading.Thread(target=func, args=(*args,), kwargs=kwargs)
        t.start()
        # t.join()  # 不等待子线程结束
        return  # 不需要子线程函数执行结果
    return callf


@background_thread
def demo_thr(sleep, name):
    print('in demo_thr')
    print('Hi, ', name)
    time.sleep(sleep)
    print('end demo_thr')
    return 'demo_thr 执行完成'
    pass


if __name__ == '__main__':
    demo_thr(5, 'Caspar')

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值