【问题标题】:Django, Python calling Python code without waiting for response?Django,Python调用Python代码而不等待响应?
【发布时间】:2010-09-27 18:12:07
【问题描述】:

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

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

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

感谢您的建议。

【问题讨论】:

标签: python django long-running-processes


【解决方案1】:

无法保证,因为我还没有使用它,但是“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 才能使其正常工作,因此它可能比您正在寻找的解决方案更复杂,但它会实现您的目标。

【讨论】:

  • 谢谢,是的,只是在进行更多搜索时遇到了这个问题,一定会检查一下
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多