Django,Python在不等待响应的情况下调用Python代码?

时间:2010-09-27 18:12:07

标签: python django long-running-processes

我正在使用Django并且正在制作一些我正在通过我的Web用户界面进行交互的长时间运行的进程。例如,它们将一直运行,每隔几分钟检查一次数据库值,并且只有在这已经改变时停止(将是布尔值为true)。所以,我希望能够使用Django与这些进行交互,但不确定如何做到这一点。当我以前使用PHP时,我有一些方法可以做到这一点,想想在Python中更容易做到但是我的搜索无法找到任何内容。

基本上,我希望能够做的就是执行python代码而不等待它完成,所以它只是开始执行然后继续执行django所需的任何其他操作,快速向用户返回一个新页面

我知道有办法调用外部程序,所以我想这可能是唯一的方法吗?有没有办法只需调用其他python代码来执行此操作?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:6)

无法保证,因为我还没有使用它,但“Celery”几乎可以满足您的要求,最初专为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以使其正常运行,因此它可能比您正在寻找的解决方案更复杂,但它会实现您的目标。

答案 1 :(得分:0)

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