首页 文章

最简单的django定时/预定任务(例如:提醒)?

提问于
浏览
2

问题与thisthis有关;

不同的是,我更喜欢可能更精确和低负荷的东西(每分钟cron工作不适合那些)并且开销最小(即安装带有rabbitmq的芹菜似乎是一个很大的矫枉过正) .

这样的示例任务是个人提醒服务器(具有可以通过网络编辑并通过电子邮件或XMPP发送的提醒) .

我可能正在寻找更像node.js的setTimeout但是对于django(虽然我可能更喜欢在node.js中实现提醒,但它仍然是一个可能有趣的问题) .

例如,可以在django app中启动新线程(函数包含sleep()和send());在哪些方面这可能是坏事?

1 回答

  • 0

    使用线程来解决这个问题的问题是Python线程的典型问题,它总是驱使人们转向多进程解决方案 . 由于您的线程不是由正常的请求 - 响应周期驱动,因此问题更加复杂 . Malcolm Tredinnick here很好地总结了这一点:

    不得不反对 . 线程不是解决此问题的好方法 . 问题是流程管理 . 如上所述,您的线程永远不会重新加入 . Web服务器进程具有您无法控制的生命周期(MaxRequestsPerChild Apache参数和其他服务器中的类似内容),并且您通过使用线程来搞乱它 . 如果您需要一个生命周期与请求 - 响应路径不匹配的流程 - 长期运行且独立于响应的流程 - 完全独立的流程绝对是正确的模型 . 使用一个线程将它绑定到响应生命周期,这会产生意想不到的副作用 .

    一个可能的解决方案可能是让一个长时间运行的过程执行您的任务,从轻微的cron进程获取唤醒信号 .

    另一种可能性是使用0mq构建一些东西,它比AMQP样式队列轻得多(当然以某些功能为代价) . Tarek Ziade正在开发一个名为powerhose的Mozilla项目,该项目使用0mq,看起来非常简单,并具有心跳功能,分辨率达到第二级 .

相关问题