我正在開發一個服務器,它必須處理大量的小數據請求。
服務器使用「拉」/「推」模式與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)異步啓動芹菜任務(並且效果很好)。
謝謝!我會嘗試你的演示(儘快)。 – pedrotech