2013-11-04 85 views
0

我正在開發一個服務器,它必須處理大量的小數據請求。
服務器使用「拉」/「推」模式與ZeroMQ一起開發。
基本上每個請求過程包括在Redis中存儲它的數據(消息)。ZeroMQ,Redis和Gevent

我想通過gevent處理每個請求來獲得更好的性能。
以下代碼無效(消息未存儲在Redis中)。

from gevent import monkey 
monkey.patch_all() 
from redis import Redis, StrictRedis 
from redis import connection 
import zmq 
import gevent 


context = zmq.Context() 
socket = context.socket(zmq.PULL) 
socket.bind("tcp://*:5000") 

connection.socket = gevent.socket 
redis = Redis() 

def enqueue(message): 
    redis.lpush('work_queue', message) 


while True: 
    message = socket.recv() 
    #print message 
    gevent.spawn(enqueue, message) 

如果我刪除gevent的東西,那麼代碼工作(消息存儲正確)。

P.S.我剛開始玩zeromq和gevent。

更新:我想實現一個簡單的任務隊列。最後使用芹菜。服務器(使用zmq)異步啓動芹菜任務(並且效果很好)。

回答

1

您似乎沒有開始事件循環。根據教程http://sdiehl.github.io/gevent-tutorial/嘗試在gevent.joinall調用中包裝spawn調用。試試看看它是否可行。注意,這可能不是使用gevent的理想方式。但它應該是一個開始。

0

與Redis的-PY pyzmq,我寫了一個演示,GEVENT版本1.0.1,

參考文獻:
(對不起,我的名聲小於10,我不能發佈超過兩個2鏈接):

[gevent with redis-py]
[gem with zmq]

參考鏈接只顯示在演示代碼:)

演示效果很好。 [ My demo code ]

+0

謝謝!我會嘗試你的演示(儘快)。 – pedrotech