后台任务有纯wsgi实现吗?
我想直接在同一上下文下使用局部变量,而不是通过代理序列化/反序列化到另一个守护进程。
在当前的 wsgi 基础设施下是否有可能做到这一点?例如,在返回响应后,运行一些回调函数?
后台任务有纯wsgi实现吗?
我想直接在同一上下文下使用局部变量,而不是通过代理序列化/反序列化到另一个守护进程。
在当前的 wsgi 基础设施下是否有可能做到这一点?例如,在返回响应后,运行一些回调函数?
这是 Python WEB-SIG 上提出的问题的副本。我引用了与 Python WEB-SIG 上的问题相同的页面,以便其他人可以看到:
http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode
但是,这样做会占用请求线程,因此在您的任务完成之前它无法处理其他请求。
在请求结束时创建后台线程不是一个好主意,除非您使用池机制来限制任务的工作线程数量。因为进程可能会崩溃或关闭,所以您将作业丢失为仅在内存中,因此不会持久。
最好使用 Celery,或者如果您认为它太重,请查看 Redis Queue (RQ)。
你可以看看 Django async。它使用数据库内队列,因此可以更好地处理事务。所有参数都必须是 JSONable,返回类型也是如此。在某些情况下,这意味着您可能需要安排一个包装函数,但这不应该让您头疼。
http://pypi.python.org/pypi/django-async
您不想在 Web 服务器中做这种事情——这绝对不是做这件事的正确地方。Django async 提供了一个 manage.py 命令,用于刷新队列,您可以在循环中运行,可以在 Web 服务器的另一台机器上运行。