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

使用场景:在你调用一个函数,但仅仅只想使其在后台执行,并且降低耦合性,可以使用此方法:
具体场景:例如: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')

 

你可能感兴趣的:(python,线程,装饰器)