如何从Django视图开始一个长时间运行的进程?

2024-05-13 19:47:17 发布

您现在位置:Python中文网/ 问答频道 /正文

从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的角度运行一个完全独立的进程,并且伤亡最少?还是我做错了什么?


Tags: django视图进程过程状态叉子multiprocessingprocess
3条回答

首先-试着用cron来完成你的任务,早就说是山雨。

如果它不适合您-那么尝试使用CeleryProject,用于Django的任务队列。它使用RabbitMQ来工作。这里有一点overview用于简单地使用基础期货

我不知道这是否适合您的情况,但是我要做的是:我使用一个任务队列(通过django模型);当调用视图时,它会在任务中输入一个新记录并愉快地重定向。而任务则由cron独立于django定期执行。

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

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

是一个很好的库,可以用来完成此任务。

相关问题 更多 >