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