不同之处在于,我更喜欢具有更高精度和低负荷的东西(每分钟的cron工作不适合那些)并且开销最小(即用兔子安装芹菜似乎是一个很大的过度杀伤)。 / p>
此类示例任务是个人提醒服务器(提醒可以通过网络进行编辑,并通过电子邮件或XMPP发送)。
我可能正在寻找更像node.js的setTimeout但是对于django(虽然我可能更喜欢在node.js中实现提醒,但它仍然是一个可能有趣的问题)。
例如,可以在django app中启动新线程(函数包含sleep()和send());以什么方式这可能是坏事?
答案 0 :(得分:0)
使用线程解决此解决方案的问题是Python线程的典型问题,它总是将人们推向多进程解决方案。由于您的线程不是由正常的请求 - 响应周期驱动,因此问题更加复杂。 Malcolm Tredinnick here很好地总结了这一点:
不得不反对。线程不是解决此问题的好方法。该 问题是流程管理。如上所述,您的线程将永远不会 重新加入。 Web服务器进程具有您无法控制的生命周期 (MaxRequestsPerChild Apache参数和其他类似的东西 服务器)你正在通过使用线程来搞乱它。
如果您需要一个生命周期与之不匹配的流程 请求 - 响应路径 - 长期运行并独立于 响应 - 一个完全独立的过程绝对是正确的模型 使用。使用线程将其与响应生命周期联系起来 会有意想不到的副作用。
一个可能的解决方案可能是让一个长时间运行的过程执行您的任务,从轻微的cron过程中获取唤醒信号。
另一种可能性是使用0mq构建一些东西,它比AMQP样式队列轻得多(当然以某些功能为代价)。 Tarek Ziade正在开发一个名为powerhose的Mozilla项目,该项目使用0mq,看起来非常简单,并具有心跳功能,分辨率达到第二。