Python工作服务守护进程?

9 投票
3 回答
2008 浏览
提问于 2025-04-15 21:54

我应该关注哪些库来编写一个Python守护进程和处理任务?另外,编写Python守护进程需要做些什么?

3 个回答

1

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

我用这个小flopsy模块来集成队列,设置起来很简单。唯一的问题是我想设置一个超时时间来等待消息,因为这个模块没有明确的方法来做到这一点。在玩了一会儿交互式命令行并做了几次dir()之后,我找到了socket对象并设置了超时。

我也考虑过Celery,但它似乎更专注于内部使用RabbitMQ来让你启动任务(定期或异步),而不是用队列来与其他系统通信。在我们的情况下,队列可以同时被Python系统和Ruby系统使用。

完成这个过程后,我做了一些调整,让它可以作为守护进程运行(主要是把标准输出存储到文件中,方便记录日志),然后创建了一个bash脚本来启动start-stop-daemon命令。我大致上是按照这个方案来做的。我发现python-daemon的时候已经晚了一天,所以工作完成后再去看就没什么意义了,但也许对一个Python项目来说会更合适。

3

我对beanstalkd非常满意,它有很多种编程语言的客户端库可以使用:

守护进程(Daemon): http://kr.github.com/beanstalkd/

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

2

你的问题有点模糊,不过我猜你的意思是想写一个Python守护进程,用来处理放在队列里的任务。如果不是这样,请告诉我。:-)

我听说过很多关于Redis的好评。GitHub上的人们为Ruby开发了一个叫resque的任务处理守护进程。如果你对编程语言不太挑剔,可以直接使用这个,但如果你有语言限制,也可以根据自己的需求,利用Redis来模拟一个,深度可以根据你需要的灵活性来调整。这可能是一个非常简单的实现方式。

我在网上搜索时还发现了另一个选项redqueue。看起来它可能已经实现了大部分的任务队列功能。

如果你在使用Django,可能会想考虑一下Celery项目。它是一个基于RabbitMQ的任务队列系统,RabbitMQ也是一个评价很高的队列服务器。

至于在Python中创建守护进程,有很多选择。你可以查看这个Activestate上的页面,这是一个不错的起点。更好的是,你可以使用python-daemon来帮你完成所有的工作。不过,如果你使用上面提到的选项或者mczepiel推荐的beanstalkd,你可能就不需要让你的进程以守护进程的方式运行了。

撰写回答