1

后台任务有纯wsgi实现吗?

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

在当前的 wsgi 基础设施下是否有可能做到这一点?例如,在返回响应后,运行一些回调函数?

4

2 回答 2

4

这是 Python WEB-SIG 上提出的问题的副本。我引用了与 Python WEB-SIG 上的问题相同的页面,以便其他人可以看到:

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

但是,这样做会占用请求线程,因此在您的任务完成之前它无法处理其他请求。

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

最好使用 Celery,或者如果您认为它太重,请查看 Redis Queue (RQ)。

于 2012-07-13T09:53:03.497 回答
1

你可以看看 Django async。它使用数据库内队列,因此可以更好地处理事务。所有参数都必须是 JSONable,返回类型也是如此。在某些情况下,这意味着您可能需要安排一个包装函数,但这不应该让您头疼。

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

您不想在 Web 服务器中做这种事情——这绝对不是做这件事的正确地方。Django async 提供了一个 manage.py 命令,用于刷新队列,您可以在循环中运行,可以在 Web 服务器的另一台机器上运行。

于 2012-07-13T04:13:39.500 回答