有些函数应该在web服务器上异步运行。发送电子邮件或数据后处理是典型的用例
编写decorator函数以异步运行函数的最佳(或最具python风格)方式是什么
我的设置很常见:Python、Django、Gunicorn或Waitress、AWS EC2标准Linux
例如,这里有一个开始:
从线程导入线程
def延迟(功能):
def装饰器(*args,**kwargs):
t=线程(目标=函数,args=args,kwargs=kwargs)
t、 daemon=True
t、 开始()
返回装饰器
预期用途:
推迟
def foo():
过关#做事
我一直在大规模和生产中使用此实现,没有任何问题
装饰器定义:
def start_new_线程(函数):
def装饰器(*args,**kwargs):
t=线程(目标=函数,args=args,kwargs=kwargs)
t、 daemon=True
t、 开始()
返回装饰器
用法示例:
@start\u new\u线程
def foo():
#做事
随着时间的推移,堆栈不断更新和转换
最初是Python 2.4.7、Django 1.4、Gunicorn 0.17.2,现在是Python 3.6、Django 2.1、Waitress 1.1
如果您正在使用任何数据库事务,Django将创建一个新连接,需要手动关闭:
来自django.db导入连接的
@推迟
def foo():
#做事
连接。关闭()