在django应用程序中实现计时器

时间:2010-01-21 15:27:33

标签: django

在我的Django应用程序中,我需要实现这个“基于计时器”的功能:

  1. 用户创建一些作业,并为每个作业定义何时(在同一单元中计时器工作,可能是几秒钟)。
  2. 用户启动计时器。
  3. 用户可以随时暂停和恢复计时器。
  4. 作业在到期时执行。
  5. 这不适合典型的cron场景,因为执行时间与用户可以启动,暂停和恢复的计时器相关联。

    这样做的首选方式是什么?

5 个答案:

答案 0 :(得分:4)

这不是Django的问题。这是一个系统架构问题。 http是无状态的,所以没有时间概念。

我的建议是使用RabbitMQ等消息队列并使用Carrot与其进行交互。您可以将作业放在队列中,然后创建一个单独的使用者守护程序,它将处理队列中的作业。消费者有关于何时处理的逻辑。

如果系统过于复杂,可能会考虑在JS中实现计时器并让它调用映射到处理工作单元的视图的URL。 JS将是计时器。

答案 1 :(得分:1)

查看Pinax,尤其是通知。

创建后,它们被推送到DB(队列),并由cron-jobbed电子邮件发送(2.消费者)处理。

在这个场景中,一旦被解雇你就不会阻止它。 这可以通过调用系统进程的som(ajax-)视图来管理....

修改

而不是cron-jobs你可以使用基于扭曲的消费者:

  • 将作业写入db,并将时间信息写入db

  • 通过套接字向扭曲的服务器发送消费(或恢复,暂停......)的请求

  • 完成其余工作

答案 2 :(得分:0)

您将最终分离(从Web服务器)进程以监视队列并执行作业。考虑如何在没有Django的情况下使用命令行工具来驱动它。使用Django模型访问数据库。

当你有了这个工作时,在基于Web的界面(使用完整的Django)上进行操作以操作队列并报告作业状态。

我认为,如果以这种方式接近它,问题会变得更加容易。

答案 3 :(得分:0)

我使用了最简单的(最粗略的,更为合适,我害怕)可能的方法:1。写了一个模型,显示当前位置和计数器的状态(活动,暂停等),2。django工作如果计数器的状态是活动的,则递增计数器,3。每分钟执行作业的cron的一个条目。

感谢大家的回答。

答案 4 :(得分:0)

您始终可以使用基于客户端的jquery计时器,但请记住使用从后端应用程序传递的值初始化计时器,同时确保最终用户没有编辑时间(通过检查编辑) 。 因此,在后端(DB本身)放置一个定时器开始时间(定时器的初始值)和定时器结束时间或定时器暂停时间。

监视后端的持续时间并触发作业(在您的情况下)。

希望这很清楚。