我对RQ员工的工作方式感到困惑!我创建了一个flask web应用程序,它在redis服务器上运行一个后台进程,然后返回结果。到目前为止,在开发期间,我一直在使用命令行在我的机器上启动rq工作进程。不过,现在我已经准备好在线启动我的应用程序。但是当一个远程用户试图在线运行应用程序时,工人的主机在哪里?
我尝试使用with Connection():
在代码中直接启动它们,它起了作用,但也中断了启动web应用程序以在浏览器中运行的过程。
谢谢你的帮助!
编辑:为了使我的问题更具体,我在我的机器上使用命令行启动了一个rq工作程序,但是当我在远程redis服务器(aws ec2上托管)上启动任务时,应用程序会暂停,并且没有工作程序活动。我的rq工作程序的配置有问题吗?或者我应该用另一种方式启动它们吗?我所做的只是import rq
然后运行rq worker simulator
这对于本地开发来说已经足够了;如果有需要更改的配置,我是否需要在命令行中进行更改?
编辑2:我成功了。我只需要运行rq worker simulator --url {ec2 address}
。谢谢保罗·贝科特给我的解释。
最佳答案
一般来说,对于任务队列(我只是对rq略知一二——请原谅我缺乏细节,但不认为它们在这里是必要的),想法是将工作从请求/响应周期中分离出来。你不需要30秒的请求-特别是当你有其他请求进来的时候!
在这个世界上,有一个状态源(redis)和一堆使用它的客户机。您的用户连接到您的api以发送请求。您的api连接到状态源。为此,可能有两个端点—启动任务和检查状态。您的api在“start task”上向pub/sub发送一条消息,并在调用check status时查找该任务的结果。
您还可以启动x个工作进程。它们连接到redis和订阅服务器。当一个任务进入时,一个工人拿起它并开始工作,然后将结果发布回redis。您运行的这些进程足以使总循环时间与您的流量保持较低。
您根本不在任何Workers或API端点中存储任何状态,因此您可以横向扩展它们-在任意多台计算机上任意启动。你只需要维护你的redis服务器——确保它是稳定的、备份的以及所有的东西(你也可以对redis进行集群并获得ha,但这是一个较长的讨论)。
关于python - 如何在线为用户创建 flask 应用程序的rq worker? (使用redis服务器)[暂停],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57816267/