从 django 视图运行 python 脚本

从 django 视图运行 python 脚本

想要从 django 视图运行一个 python 脚本。我不想等到脚本执行。python 脚本应该在后台完成其工作,同时,我将向客户端发送响应“脚本正在后台运行”。有什么想法吗?

答案1

当你说“在后台执行”时,我会建议芹菜. 它涉及运行 RabbitMQ 作为本地守护进程,Celery 将其用作中间数据存储,并Django 可以要求 Celery 执行任务

如果您需要跟踪状态,一旦您添加了一项任务,您就可以获取它的 UUID,然后查询 Celery 以获取状态,和/或只是让 Celery 将结果粘贴到您轮询的标准 Django ORM 中(或使用 webhook,或现在时髦人士正在使用的任何工具)。


当然,仅仅在后台运行某些东西,就需要大量的学习和持续的负担。你可以用肮脏的subprocess.Popen方式。您将不会捕获任何输出或获取任何状态...但它应该可以工作。

答案2

subprocess.Popen如果你想立即回复,这是最好的选择。但请确保subprocess.Popen没有返回任何值。即,您必须使用如下所示的方法:

subprocess.Popen(["python","test.py"], close_fds=True)

同时使用 close_fds=True 也能起到更好的效果。

相关内容