python - 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 服务器上,但我希望能够推送数据并在另一台服务器上拥有一个工作人员。你知道这是否可行或者还有什么其他的东西可以用来解决这个问题?
谢谢。
解决方案
在其他节点上拥有队列工作者的模式很常见。
所以在你的烧瓶应用程序节点中配置一个远程 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)
推荐阅读
- c - 函数连接额外的字符
- angularjs - 如何使用angularjs从其他js文件中注入模块中的依赖项
- c# - C#控制台:设置windows键盘RepeatDelay
- twilio - 任务关闭后,Twilio 工作人员活动不会从忙碌变为空闲
- keycloak - 是否可以使用自定义用户属性进行 KeyCloak 身份验证?
- memory-leaks - 重复添加/删除导致内存泄漏
- sql - max 函数在有 case when 子句时没有
- html - 如何通过select添加请求参数?
- java - 传递对 javafx.application.Application 的引用
- android - 在自定义工具栏中对齐多个视图