我正在使用Django并且正在制作一些我正在通过我的Web用户界面进行交互的长时间运行的进程。例如,它们将一直运行,每隔几分钟检查一次数据库值,并且只有在这已经改变时停止(将是布尔值为true)。所以,我希望能够使用Django与这些进行交互,但不确定如何做到这一点。当我以前使用PHP时,我有一些方法可以做到这一点,想想在Python中更容易做到但是我的搜索无法找到任何内容。
基本上,我希望能够做的就是执行python代码而不等待它完成,所以它只是开始执行然后继续执行django所需的任何其他操作,快速向用户返回一个新页面
我知道有办法调用外部程序,所以我想这可能是唯一的方法吗?有没有办法只需调用其他python代码来执行此操作?
感谢您的任何建议。
答案 0 :(得分:6)
无法保证,因为我还没有使用它,但“Celery”几乎可以满足您的要求,最初专为Django而设计。
他们的示例显示了添加两个数字的简单任务:
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)。