Python作业服务守护程序?

时间:2010-04-22 04:46:04

标签: python

编写python守护程序和处理作业时,我应该查看哪些软件包?另外,我需要为python守护进程做些什么?

3 个答案:

答案 0 :(得分:3)

我对beanstalkd很满意,它提供了各种语言的客户端库:

守护程序: http://kr.github.com/beanstalkd/

Python客户端库: http://code.google.com/p/pybeanstalk/

答案 1 :(得分:2)

你的问题有点模棱两可,但我假设你的意思是你想写一个python守护进程来处理被抛入队列的作业。如果没有,请说同样多。 : - )

我听说过很多关于redis的好东西。 github的人们构建了resque作为Ruby的作业处理守护进程。如果您的语言灵活,您可以使用它,但如果您不是,您可以使用 redis作为队列系统,尽可能多地或稍微深入地模拟它。根据您需要它的可插拔性和可扩展性,这可能是一个非常简单的实现方法。

我在谷歌搜索后遇到的另一个选择是redqueue。看起来它可能已经实现了大部分作业队列。

如果你正在使用django,你可能希望考虑Celery项目。这是一个基于RabbitMQ的作业队列系统,它是另一个具有出色评论的排队服务器。

至于在python中创建一个守护进程,有很多选项。你可以看看这个page on activestate,这是一个好的开始。更好的是,您可以使用python-daemon为您完成所有操作。但是如果您使用上述选项之一或者mczepiel建议的beanstalkd,您可能不必将进程作为守护进程运行。

答案 2 :(得分:1)

我最近(本周)在RabbitMQ中实现了一个队列,其中一个python守护程序提取信息并将其存储在数据库中(使用Django ORM)。守护进程有一个中间缓冲区,因此它会稍微等待并分批写入数据库,而不是每次有一条消息到达时写入。

我使用这个小flopsy模块与队列进行了集成,这个模块很容易设置。唯一的问题是我能够设置等待消息的超时,因为模块没有明确的方法。在使用交互式shell并制作一些dir()一段时间后,我设法转到socket对象并设置超时。

我还考虑了Celery,但似乎更专注于在内部使用RabbitMQ来允许您(定期或异步)启动任务,更多是使用队列与其他系统进行通信。在我们的例子中,队列可以由Python系统和Ruby系统提供。

一旦我完成了这个过程,我做了一些调整,允许将它作为一个守护进程运行(主要是将标准输出存储到一个文件以便于记录),然后创建一个启动{{3的bash脚本命令。我或多或少地遵循了start-stop-daemon 我发现schema只有一天晚了,所以在完成工作之后重新审视它是没有意义的,但对于Python项目来说可能更有意义。