首页 > 解决方案 > Python Redis 队列

问题描述

我想在 redis + Flask 和 Python 中实现一个队列。我已经用 RQ 实现了这样的查询,如果你有 Flask 应用程序和任务在同一台服务器上工作,它就可以正常工作。我想知道是否可以创建一个队列(多消费者),其中工作人员实际上在另一台服务器上。例如:

客户端将数据发布到 Flask -> Flask 在 Redis 队列中创建一个项目 -> Redis 队列被其他服务器(后端)上的一些工作人员拾取。

由于 Flask 中的代码类似于:

redis_conn = Redis()
q = Queue('my_queue', connection=redis_conn)
job = q.enqueue_call(func='myqueue.myfunc', args=(json,), result_ttl=5000)

显然,'myqueue.myfunc' 需要留在 Flask 服务器上,但我希望能够推送数据并在另一台服务器上拥有一个工作人员。你知道这是否可行或者还有什么其他的东西可以用来解决这个问题?

谢谢。

标签: pythonflaskredispython-rq

解决方案


在其他节点上拥有队列工作者的模式很常见。

所以在你的烧瓶应用程序节点中配置一个远程 redis 服务器

r = redis.Redis(host='myredis.example.com', port=6379)

然后在一个或多个工作节点上

from redis import Redis
from rq import Queue, Worker

# Returns all workers registered in this connection
redis = Redis(host='myredis.example.com', port=6379)
workers = Worker.all(connection=redis)

# Returns all workers in this queue (new in version 0.10.0)
queue = Queue('queue_name')
workers = Worker.all(queue=queue)
worker = workers[0]
print(worker.name)

推荐阅读