有些函数应该在web服务器上异步运行。发送电子邮件或数据后处理是典型的用例。
编写decorator函数以异步运行函数的最佳(或最pythonic)方法是什么?
我的设置很常见:Python、Django、Gunicorn或Waitress、AWS EC2标准Linux
例如,下面是一个开始:
from threading import Thread
def postpone(function):
def decorator(*args, **kwargs):
t = Thread(target = function, args=args, kwargs=kwargs)
t.daemon = True
t.start()
return decorator
预期用途:
@postpone
def foo():
pass #do stuff
我继续在规模和生产中使用这个实现,没有任何问题。
装饰定义:
示例用法:
随着时间的推移,堆栈已经更新和转换,没有失败。
最初是Python2.4.7,Django 1.4,Gunicorn 0.17.2,现在是Python3.6,Django 2.1,女招待1.1。
如果您正在使用任何数据库事务,Django将创建一个新连接,需要手动关闭该连接:
Celery是异步任务队列/作业队列。它有很好的记录,非常适合你的需要。我建议你开始here
在Django中,最常用的异步处理方法是使用Celery和^{} 。
相关问题 更多 >
编程相关推荐