用Python写一个守护进程是个好主意吗?

时间:2012-03-19 23:00:16

标签: python daemon

我必须编写一个不断在后台运行并执行一些简单任务的守护程序。逻辑并不复杂,但它必须运行很长一段时间并且稳定。

我认为C ++是编写这种应用程序的不错选择,但是我也在考虑使用Python,因为它更容易编写和快速测试。

我遇到的问题是,我不确定它的运行时环境将如何在长时间内运行。由于一些GC怪癖,它会占用越来越多的记忆吗?它会意外崩溃吗?我之前从未在Python中编写过守护进程,所以如果有人在这里做过,请分享你的经验。谢谢!

3 个答案:

答案 0 :(得分:14)

我为我的上一家公司用Python编写了许多守护进程。简短的回答是,它运作得很好。只要代码本身没有一些巨大的记忆炸弹,我就再也没有看到任何逐渐退化或内存占用。请注意全局或类范围内的任何内容,因为它们会继续存在,因此请比平常更频繁地使用del。否则,就像我说的那样,我个人不会报告任何问题。

如果你想知道,他们在例行重启之间运行了数月和数月(通常是6个月),没有问题。

答案 1 :(得分:4)

是的它可以泄漏。是的它会意外崩溃。什么都可以。

我会说你在手动内存管理(例如C ++)的环境中比在Python之类的环境中更容易意外泄漏。

至于意外崩溃,很可能,任意一块Python可能比任意一块Java更容易意外崩溃,因为后者可以从static typing中受益,你可以在那里捕获大量错误在编译时,Python具有duck typing和其他形式的灵活性。

实际上,Python对于你想要做的事情来说是一个非常合理的选择。看看像Twisted这样的东西可以用来构建周围的东西,或者至少是结构的想法(你的问题听起来像某种学校作业,所以我不确定实施的自由度是多少你得到了)

答案 2 :(得分:1)

我在C / C ++和Perl中编写了许多内容,这些内容是在LINUX盒O.S.时启动的。靴子,使用rc.d。

启动它们

此外,我编写了几个java和python脚本,它们的启动方式与我上面提到的相同,但我需要一个小的shell脚本(.sh文件)来启动它们,我使用了rc.5。

让我告诉你,你对运行时环境的担忧是完全有效的,你必须要小心你将使用的运行级别...(仅从rc.2到rc.5,因为rc.1和rc.6适用于系统)。

如果运行级别太低,python运行时可能在启动程序时不会启动,并且可能会失败。例如:在LAMP服务器中,MySQL和Apache在rc.3中启动,其中网络已经可用。

我认为你最好的方法是在python中创建脚本并使用rc.5中的.sh文件启动它。

祝你好运!