2012-08-29 39 views
0

我一直在写一些django项目/应用程序,启动一些测试脚本。我以前问过关于如何在此处执行此操作的问题。integrating python scripts with django提交表单挂起,直到初始化过程完成

我碰到了一个我不认为会发生的问题。我有一个表单工作,使用jquery显示特定的复选框,这些复选框传递的值将启动一个API到我正在测试的应用程序。完全像我最初的问题中的代码。然而,当我提交表单,表单挂而后端处理完成

submittest.initialise_test(t_start, t_templatename, t_datacenter) 

return render_to_response('testsubmitted.html') 

我知道我可以使用一个或POPEN cron的,但我已经写我的应用程序,它会采取一些重新设计。

任何想法如何让submittest.initialise_test(t_start,t_templatename,t_datacenter)成为异步调用或解决此问题的方法?结果被写入数据库,然后我希望使用该数据库使用ajax呈现结果页面以更新结果。

+0

你可以尝试产生新的线程http://docs.python.org/library/thread.html#module-thread – Rohan

+0

谢谢 - 我一直在读这个..我只是不想要任何产生的线程这是保持开放,但我一定会考虑这..可能是一个简单的选择 – Oli

+0

其实这工作,我没有在最后使用消息队列。我所做的只是导入线程,然后将submittest.intialise_test(t_start,t_templatename,t_datacenter) 更改为thread.start_new_thread(submittest.intialise_test,(t_start,t_templatename,t_datacenter)) – Oli

回答

1

您可以使用众多django background queue apps之一在后台进程中运行任务。

+0

是的,我想到了。我会看看,看看有什么选择..我有一种感觉,这将是一个大的应用程序重写虽然 – Oli

+0

嗯,我不知道你的代码,所以我不能说...但如果它是干净的那么你应该找到一个快速的方法。不要试图在任务定义中添加太多的代码,而是尝试使任务调用代码在应用程序中正确分解出来(这样您就可以在有或没有任务的情况下使用该代码)。 – jpic

+0

当然 - 谢谢你的建议。我的应用程序大约有7000行代码。我已经使用类来定义不同的功能,并在django的应用程序中分割这些类。即,API调用一个应用程序,另一个应用程序中的表单和视图,另一个应用程序中的db调用。但总而言之,所有这些呼吁都是很难做到的。然而,对apis的呼叫是我需要启动任务的地方,所以也许它不会那么糟糕。我只是将这些任务放在队列中进行轮询。理论上这就是 – Oli

相关问题