【发布时间】:2020-03-25 21:28:56
【问题描述】:
我想在 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 服务器上,但我希望能够推送数据并在另一台服务器上拥有一个工作人员。你知道这是否可行或有什么其他方法可以用来解决这个问题?
谢谢。
【问题讨论】:
-
顺便说一下,我想到了 Celery,但我想知道是否还有其他可能的解决方案。
-
我认为将许多工作人员连接到您的 redis 服务器没有任何问题。你能清楚地描述你的问题吗?
-
分布式队列也有很多不同的解决方案。只是一个快速的谷歌搜索显示:dramatiq.io,python-rq.org,rabbitmq.com
-
嗨,彼得,我想做的是建立一个 redis 队列(我想使用 Redis 而没有像 RabbitMQ 这样的其他技术——尽管它实际上很好)。基本上,我希望有可能将数据推送到 Redis(JSON 数据)并让多个工作人员(在多个服务器上)解析数据,执行一些繁重的内存密集型任务,然后将数据保存到数据库中。例如,我想在后端有 2/3 个服务器(不能从公共 IP 访问),并且在每台服务器上有 5/10 个工作人员来处理 Redis 队列。我想使用“rpush”,但我想知道是否有更好的解决方案。
-
当我做入队时,我不确定如何在分布式环境中正确实现 Python-RQ,因为我需要提供类名/函数名并且类名/函数名已启用另一台服务器。
标签: python flask redis python-rq