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

时间:2012-02-06 22:34:49

标签: python django

问题与thisthis;

相关

不同之处在于,我更喜欢具有更高精度和低负荷的东西(每分钟的cron工作不适合那些)并且开销最小(即用兔子安装芹菜似乎是一个很大的过度杀伤)。 / p>

此类示例任务是个人提醒服务器(提醒可以通过网络进行编辑,并通过电子邮件或XMPP发送)。

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

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

1 个答案:

答案 0 :(得分:0)

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

  

不得不反对。线程不是解决此问题的好方法。该   问题是流程管理。如上所述,您的线程将永远不会   重新加入。 Web服务器进程具有您无法控制的生命周期   (MaxRequestsPerChild Apache参数和其他类似的东西   服务器)你正在通过使用线程来搞乱它。

     

如果您需要一个生命周期与之不匹配的流程   请求 - 响应路径 - 长期运行并独立于   响应 - 一个完全独立的过程绝对是正确的模型   使用。使用线程将其与响应生命周期联系起来   会有意想不到的副作用。

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

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