除了芹菜之外,后台工作者、django/wsgi 中的异步延迟任务队列的替代选择是什么?



后台任务是否有纯wsgi实现?

我想直接在同一上下文下使用本地变量,而不是通过代理将其序列化/反序列化到另一个守护进程。

在目前的wsgi基础设施下,有可能实现这一点吗?例如,在返回响应yield之后,运行一些回调函数?

这是在Python WEB-SIG上提出的问题的重复。我引用了与Python WEB-SIG上回答问题时提供的页面相同的页面,以便其他人可以看到它:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

然而,在这样做的过程中,它会绑定请求线程,因此在您的任务完成之前,它将无法处理其他请求。

在请求结束时创建后台线程不是一个好主意,除非您使用池机制来限制任务的工作线程数量。因为进程可能会崩溃或关闭,所以作业只在内存中,因此不会持久化。

最好使用Celery,或者如果你认为它太重,可以看看Redis队列(RQ)。

您可以查看Django async。它使用了数据库中的队列,因此处理事务的效果要好得多。所有参数都需要是JSONable,返回类型也是如此。在某些情况下,这意味着您可能需要安排一个包装器函数,但这不会让您感到头疼。

http://pypi.python.org/pypi/django-async

你不想在web服务器内部做这种事情——这绝对不是合适的地方。Django async提供了一个manage.py命令来刷新队列,你可以在循环中运行该命令,也可以在web服务器的另一台机器上运行。

最新更新