Python Django的多线程处理

有些函数应该在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():
#做事
连接。关闭()

发表评论