Django,Python调用Python代码时不等待响应?

3 投票
2 回答
2403 浏览
提问于 2025-04-16 04:39

我正在使用Django,想要处理一些需要长时间运行的任务,这些任务通过我的网页界面进行交互。比如,这些任务会一直运行,每隔几分钟检查一次数据库中的某个值,只有当这个值发生变化时才会停止(这个值是布尔类型,只有真和假)。所以,我希望能用Django来与这些任务进行交互,但我不太确定该怎么做。当我用PHP的时候,有一些方法可以做到这一点,我觉得在Python中应该会更简单,但我在搜索时没有找到相关的信息。

简单来说,我想要的是能够执行Python代码,而不需要等它执行完毕。也就是说,它开始执行后,就可以继续处理Django的其他事情,快速返回一个新页面给用户。

我知道有一些方法可以调用外部程序,所以我想这可能是唯一的解决办法?有没有办法仅仅通过调用其他Python代码来实现这个?

谢谢任何建议。

2 个回答

0

你想要一个异步消息管理器。我有一个教程,教你如何把Gearman和Django结合起来。任何可以被“腌制”的Python对象都可以发送到Gearman,Gearman会处理所有的工作,并把结果发送到你想要的地方;这个教程里还包括了如何把结果发回Django数据库的例子(它还展示了如何在Django之外使用ORM)。

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,这样才能让它正常工作,所以这个解决方案可能比你想要的要复杂一些,但它能帮你实现目标。

撰写回答