2010-04-22 87 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項目來說也許更有意義。