我想从Django视图调用一个函数,这可能需要2-5分钟才能完成。我计划异步调用它,在作业启动后返回,并使用AJAX进行轮询以等待完成的标志。
我不想使用像Celery+RabbitMQ这样的重量级解决方案,只要一个简单的异步调用就可以了。
我怎么发动汽车呢?我读过关于子进程、线程处理和扭曲的文章。在Django视图中使用哪一种方法(最安全)?
发布于 2014-07-23 02:09:09
到目前为止,最好的解决方案是单独的工作排队系统,如芹菜;没有特别好的替代方案。这就是作业排队系统的用途。芹菜有一些重量较轻的替代品,如RQ (Redis ),它使用Redis实例作为后端,并有一个名为姜戈-rq的方便的Django接口。
我强烈鼓励您使用解决此问题的专用工具,因为临时解决方案往往会导致复杂和难以调试的问题。
发布于 2014-07-23 02:23:10
如果不想求助于Celery+Redis或RabbitMQ,可以用处理代码编写管理命令。从您的观点来看,您可以使用以下内容异步调用您的管理命令
from subprocess import Popen
p = Popen(['manage.py', 'my_command'])
正如有人在另一个问题上说的: Popen实例可以执行其他各种事情,比如您可以poll()
它来查看它是否仍在运行。我希望您得到的popen实例是线程安全的,或者是可序列化的,这样您就可以重用它来知道进程是否已经运行完毕。
https://stackoverflow.com/questions/24900694
复制相似问题