2013-10-24 44 views
0

任务是在后台运行一个python脚本,并在提交请求时放置一个类似“您的脚本正在运行...稍后返回给您”的网页,然后在运行结束时下载结果页面。芹菜似乎是一个不错的选择,但它听起来是一种矫枉过正,因为只有一个脚本会在后端运行。在Django中有一个简单的方法来处理它吗?谢谢。在Django的后台处理运行python脚本的好方法?

+0

到目前为止你有尝试过什么吗? – PepperoniPizza

+0

用户是否停留在此页面上,直到脚本完成?当用户离开网站并返回时,页面是否需要检查后台任务的状态?像这样的用例将决定您是否可以简单地通过Ajax轮询数据库状态更改,或者您是否需要更强大的功能。 – Brandon

+0

简单的用例是呈现一个页面,显示脚本正在运行并在脚本完成时呈现另一个页面。谢谢! – user2916490

回答

1

您可以使用python subprocess内置模块。正确使用Popen对象,您可以启动一个进程,通过Popen.poll()查看它的运行状态,等待它完成Popen.wait()甚至与它通信或终止它。所以我想你可以在Django/Python中设置一个变量,设置为False,每次当你登录一个进程时,当这个变量为False时,你可以在站点上显示一个状态,一旦完成,你将变量设置为True并执行你的操作。

+0

如果您打开WSGI中的子进程并打开管道与其进行通信,只要请求终止,它就会被终止。 – vartec

+0

非常感谢!我想我理解子流程步骤。但在我看来,如何在运行时返回一页来指示脚本状态,并在结束时返回另一页结果。我尝试while循环,但它似乎不工作。 – user2916490