python - ZeroMQ、Redis 和 Gevent

标签 python performance redis zeromq gevent

我正在开发一个必须处理大量小数据请求的服务器。
服务器是用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 的内容,那么代码就可以工作(消息可以正确存储)。

附注我刚刚开始使用 Zeromq 和 gevent。

更新:我想实现一个简单的任务队列。最终使用 celery 。服务器(使用 zmq)异步启动 celery 任务(并且效果很好)。

最佳答案

要将 Zeromq 与 gevent 结合使用,您必须导入 de zmq.green 模块。

将 zmq.green 导入为 zmq

http://zeromq.github.io/pyzmq/api/zmq.green.html

关于python - ZeroMQ、Redis 和 Gevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773843/

相关文章:

python - 如何注释数据类中的字段类型与其__init__的类型不同?

Redis键函数用于匹配多种模式

redis - 如何使用 RedisJson MGET 获取多个键的特定属性?

php - MySQL 和 PHP 性能

MySQL 连接性能

ruby-on-rails - 如何从 Redis 缓存中获取对象而不是哈希?

python - Pip 默认行为与 virtualenv 冲突?

python - 使用该数据帧的三列之间的比较来过滤数据帧

python - 在 Python 中的字符前添加零

mysql - 索引sql查询