如何开始从一个Django视图一个长期运行的进程?(How to start a long-runn

2019-09-01 01:09发布

我需要运行,可能需要几个小时从一个Django视图来完成的过程。 我并不需要知道状态或与它沟通,但我需要一个视图启动后要立即离开重定向。

我已经尝试使用subprocess.Popen ,新中使用它threading.Threadmultiprocessing.Process 。 但是,父进程一直挂着,直到子进程终止。 几乎得到它做的唯一方法是用叉子。 显然是因为它留下,直到父终止僵尸进程是不好的。

这就是我试图用叉子时要做到:

if os.fork() == 0:
    subprocess.Popen(["/usr/bin/python", script_path, "-v"])
else:
    return HttpResponseRedirect(reverse('view_to_redirect'))

那么,有没有一种方法,以最小的伤亡Django视图运行一个完全独立的进程? 还是我做错了什么?

Answer 1:

我不知道这是否会适合你的情况,但这里是我做的:我使用任务队列(通过Django的模型); 当视图被调用时,它进入的任务的新纪录,并愉快地重定向。 反过来任务由cron定期独立于Django的执行。

编辑:cron的调用相关的(和自定义)Django的命令执行任务。



Answer 2:

首先的 - 尝试使用cron的为你工作,早说单于。

如果它不适合你-然后尝试使用CeleryProject ,对于Django的任务队列。 对于工作,它使用的RabbitMQ 。 这里是一个小的概述使用立足期货简单



Answer 3:

http://code.google.com/p/django-command-extensions/wiki/JobsScheduling

是,你可以用它来完成这个任务一个漂亮的图书馆。



Answer 4:

看看在kronos.py代码,看看一个解决这个问题。

http://www.razorvine.net/download/kronos.py



文章来源: How to start a long-running process from a Django view?