2011-03-19 57 views
2

方案實現與gevent兼容的工作進程池的最佳方式是什麼?

我有根據瞬息萬變的動態內容在Python和GEVENT,這是連接到TCP/IP上的後端服務,併爲許多Web客戶端應用的服務器進程(〜1000每個進程)由後端服務提供的更改。該服務在Ubuntu 10.04上運行,不會在Windows上運行,因此目標平臺已修復。目前,我們正在使用Python 2.6.6。

問題

服務的改變,許多客戶端可以在處理由後端發送的變化引起的滯後,所以我的計劃是服務器分成多個進程。許多工作進程將爲Web客戶端服務,而主進程仍將連接到後端服務。我已經使用一個單獨的greenlet池來爲Web客戶端提供服務,但他們需要放入工作進程。

問題

能否請你點我一個工作進程池實施GEVENT或找出我如何可以使用Python的多模塊GEVENT的正確方法?

限制

我想避免引入Python的線程進入我們的流程,因爲這會給房間GIL爭,這將通過引入延遲降低性能。所以如果可能的話,這將是一個乾淨的多處理+ gevent解決方案。

回答

1

我推薦看看Celery - 用Python編寫的分佈式任務處理系統。

celery的基本想法是,你有一個隊列(無論是RabbitMQRedis),書面像Python過程的工人,並通過celeryd守護暴露。根據芹菜文檔,celeryd也支持以gevent模式運行(對於網絡I/O綁定進程),所以大概您的工作代碼不需要太多修改就可以在此環境中運行。

2

我會考慮自定義套接字IPC或使用ZeroMQ。

+0

感謝您的回覆。我最終實現了自定義套接字IPC。 – fviktor 2011-07-13 16:05:39

+0

看起來你是對的。在許多情況下使用ZeroMQ是最好的解決方案。 – fviktor 2012-05-08 22:39:58

相關問題