我正在开发一个服务器,它需要处理大量的小数据请求。
服务器使用ZeroMQ开发,使用拉/推模式。
基本上,每个请求进程都包含在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内容,那么代码就能工作(消息被正确地存储)。
我刚开始玩zeromq和gevent。
更新:我想实现一个简单的任务队列。最后用的是芹菜。服务器(使用zmq)异步启动芹菜任务(而且工作效果很好)。
发布于 2014-01-07 18:59:49
要在gevent中使用zeromq,必须导入de zmq.green模块。
将zmq.green导入为zmq
http://zeromq.github.io/pyzmq/api/zmq.green.html
发布于 2013-11-05 04:53:12
您似乎没有启动事件循环。根据http://sdiehl.github.io/gevent-tutorial/的教程,尝试将生成的调用包装为gevent.joinall调用。那就试试看它是否有效。注意,这可能不是使用gevent的理想方式。但这应该是个开始。
发布于 2014-10-22 07:34:41
使用redis-py pyzmq,我编写了一个演示,gevent版本1.0.1,
参考文献:
(对不起,我的声誉不足10,我不能发布两个以上的链接):
带redis-py的with
使用zmq的gevent
引用链接仅显示在演示代码中:)
演示效果很好。[我的演示代码]
https://stackoverflow.com/questions/19773843
复制相似问题