3

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

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

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

感谢您的任何建议。

4

2 回答 2

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才能使其正常工作,因此它可能比您正在寻找的解决方案更复杂,但它会实现您的目标。

于 2010-09-27T18:17:35.140 回答
0

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

于 2010-09-29T16:56:56.247 回答