相关疑难解决方法(0)

如何从Django视图启动长时间运行的进程?

我需要运行一个可能需要数小时才能从Django视图完成的过程.我不需要知道状态或与之通信,但我需要该视图在启动过程后立即重定向.

我已经尝试使用subprocess.Popen内一个新的使用它threading.Thread,multiprocessing.Process.但是,父进程一直挂起,直到子进程终止.几乎完成它的唯一方法是使用fork.显然这并不好,因为它会留下一个僵尸进程,直到父终止.

这就是我在使用fork时要做的事情:

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

那么,有没有办法从Django视图运行完全独立的进程,伤亡最小?或者我做错了什么?

python django long-running-processes

15
推荐指数
2
解决办法
6348
查看次数

Web应用程序后台进程,新手设计问题

经过多年的桌面应用程序开发后,我正在构建我的第一个Web应用程序(我正在使用Django/Python,但这可能是一个完全通用的问题,我不确定).所以请注意 - 这可能是一个超新手的问题......

我的一个用户进程涉及服务器中的繁重处理(即用户输入内容,服务器需要约10分钟来处理它).在桌面应用程序上,我会做的是将用户输入放入受互斥锁保护的队列中,并使用该互斥锁在队列中以低优先级阻塞运行专用后台线程.

然而,在Web应用程序中,一切似乎都面向与HTTP请求的同步.

假设我将数据库用作队列,运行后台进程的最佳实践架构是什么?

django background web-applications

9
推荐指数
1
解决办法
4941
查看次数

django,fastcgi:如何管理一个长时间运行的进程?

我继承了一个django + fastcgi应用程序,需要对其进行修改以执行冗长的计算(最多半小时或更长时间).我想要做的是在后台运行计算并返回"你的工作已经开始" - 类型的响应.当进程正在运行时,对URL的进一步命中应返回"您的作业仍在运行",直到作业完成,此时应返回作业的结果.对url的任何后续命中都应该返回缓存的结果.

我是django的一个新手,并且在十年内没有做过任何重要的网络工作,所以我不知道是否有内置的方法来做我想要的.我已经尝试通过subprocess.Popen()启动该过程,并且它工作正常,除了它在进程表中留下一个已解除的条目.我需要一个干净的解决方案,一旦完成就可以删除临时文件和进程的任何痕迹.

我也尝试过fork()和线程,但还没有找到可行的解决方案.对于我来说似乎是一个非常常见的用例,是否有规范的解决方案?FWIW这只会在流量非常低的内部服务器上使用.

python django fastcgi

8
推荐指数
1
解决办法
3388
查看次数