2010-04-22 110 views

回答

2

你的问题有点含糊,但我假设你的意思是你想编写一个python守护进程来处理在队列中抛出的作业。如果不是,请尽量多说。 :-)

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

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

如果您使用的是django,您不妨考虑Celery项目。这是一个基于RabbitMQ的作业队列系统,它是另一个具有出色评论的排队服务器。

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

+0

我看到了python-daemon,它足够稳定吗? – Timmy 2010-04-22 13:27:32

+0

我相信是这样,但我没有花时间阅读它的代码或任何东西,所以我不能确定。 – Benson 2010-04-22 21:15:16

1

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

我已经使用这个小小的flopsy模块与队列进行了整合,这很容易设置。唯一的问题是我能够设置等待消息的超时时间,因为模块没有明确的方式来做这件事。经过一段时间玩交互式shell并创建几个dir()后,我设法找到socket对象并设置超时。

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

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