我正在开发一个必须处理大量小数据请求的服务器。
服务器是用 ZeroMQ 开发的,使用 PULL/PUSH 模式。
基本上,每个请求过程都包括将其数据(消息)存储在 Redis 中。
我希望通过使用 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 的东西,那么代码就可以工作(消息存储正确)。
PS 我刚开始玩 zeromq 和 gevent。
更新:我想实现一个简单的任务队列。最后使用芹菜。服务器(使用 zmq)异步启动 celery 任务(效果很好)。