Django:在后台检测脚本的完成情况和其他功能应该可以同时工作

2024-04-26 22:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在Django项目中的一个简单的按钮按下事件上执行一个命令子流程.Popen()“在我的视图.py). 执行此脚本后,可能需要2分钟到5分钟的时间来完成。因此,当脚本执行时,我需要禁用html按钮,但我希望用户在脚本在后台完成时继续使用其他网页。现在真正的问题是,我想启用html按钮回来,当进程完成! 好几天来我一直在做这个。任何帮助或建议都非常感谢。你知道吗


Tags: 项目django用户py命令脚本视图网页
2条回答

就像瓦伦特·杰迪建议的那样,你应该在django上实时使用Swampdagon。你知道吗

你应该在这里学习第一个教程:http://swampdragon.net/tutorial/part-1-here-be-dragons-and-thats-a-good-thing/

然后读这篇文章,因为它包含了完成你想要的事情所需的知识: http://swampdragon.net/tutorial/building-a-real-time-server-monitor-app-with-swampdragon-and-django/

但是,在您的情况下,您的情况与上面给出的示例有所不同:

  • 使用Celery或任何其他任务队列,因为等待的操作需要很长时间才能完成,所以需要将其传递到后台。(如果不想冻结占用大量内存的系统,也可以让这些任务一个接一个地执行)。

  • 将运行脚本的部分代码移到芹菜任务中,在这种情况下,应该在芹菜任务中调用Popen,而不是在视图中调用(swampdagon中的路由器)

  • 然后,使用用户的唯一标识符创建一个频道,并在html文件中为按钮添加相关的javascript代码,以订阅该用户的频道(还可以考虑禁用视图(路由器)上的功能,因为前端代码可以使用。

  • 频道的角色是拉celery task state,你 然后根据状态禁用或启用按钮 完成任务。

概述:

  1. 为脚本创建芹菜任务。你知道吗
  2. 创建拉取任务状态的用户唯一通道。你知道吗
  3. 根据taks的状态禁用或启用前端的按钮,如果脚本失败,考虑显示失败消息,以便用户重新启动。你知道吗

希望这有帮助!你知道吗

我想你得用一些django的“实时”库。我个人知道django-realtime(简单的一个)和swampdragon(不那么简单,但更实用)。使用这两个库,您可以创建web套接字连接,并以这种方式从服务器向客户端发送消息。它可能是用于启用html按钮或javascript警报的命令,或者任何您想要的命令。你知道吗

在您的情况下,我建议您第一个选择,因为您可以从任何视图直接向客户端发送消息。据我所知,沼泽龙需要模型来跟踪变化。你知道吗

相关问题 更多 >