2010-09-27 221 views
2

我正在使用Django,并且正在制作一些长时间运行的进程,我只是通过我的Web用户界面进行交互。例如,它们会一直运行,每隔几分钟检查一次数据库值,并且只有在这种情况发生变化时才停止(将布尔值true false)。所以,我想能够使用Django与这些进行交互,但我不确定如何执行此操作。当我以前使用PHP时,我有一些这样做的方法,在Python中做这件事情会更容易,但我无法通过搜索找到任何东西。Django,Python调用Python代码而不等待响应?

基本上,我想要做的就是执行python代码而不用等待它完成,所以它只是开始执行,然后继续做任何它需要的django,快速返回一个新的页面用户。

我知道有方法可以调用外部程序,所以我想这可能是唯一的方法吗?有没有办法做到这一点,只是调用其他Python代码?

感谢您的任何建议。

+0

可能的重复[我怎么能把一个进程在后台使用Django?](http://stackoverflow.com/questions/2872605/how-can-i-put-a-process-in-background-using- django) – 2010-09-28 03:16:32

回答

6

不能保证它,因为我还没有使用它,但“芹菜”几乎做你想问什么,最初是专门为Django生成的。

http://celeryproject.org/

他们的例子显示一个简单的任务增加了两个数字:

from celery.decorators import task 

@task 
def add(x, y): 
    return x + y 

您可以在后台执行任务,或等待它完成:

>>> result = add.delay(8, 8) 
>>> result.wait() # wait for and return the result 
16 

你可能还需要安装RabbitMQ才能使其正常工作,因此它可能比您正在寻找的解决方案更复杂,但它会实现有你的目标。

+0

谢谢,是的,刚刚遇到这个在做更多的搜索,一定会检查出来 – Rick 2010-09-27 18:18:58

0

你想要一个异步消息管理器。在将Gearman与Django集成时我有a tutorial。任何Pickleable Python对象都可以发送给Gearman,Gearman将完成所有工作并将结果发布到任意位置;本教程包含回发给Django数据库的示例(它还显示了如何在Django之外使用ORM)。