我们最近不得不用RQ代替 celery ,因为它更简单,并且 celery 给我们带来了太多问题。现在,我们无法找到一种动态创建多个队列的方法,因为我们需要同时完成多个作业。因此,基本上,对我们其中一条路线的每个请求都应开始一项工作,让多个用户等待一个用户的工作完成才有意义,然后我们才能继续下一个工作。我们会定期向服务器发送请求,以获取作业状态和一些元数据。这样,我们可以使用进度条来更新用户(这可能是一个漫长的过程,因此必须为UX进行此操作)

我们正在使用Django和Python的rq库。我们没有使用django-rq(请告诉我使用此功能是否有优势)

到目前为止,我们在一个 Controller 中启动了一个任务,例如:

redis_conn = Redis()
q = Queue(connection=redis_conn)
job = django_rq.enqueue(render_task, new_render.pk, domain=domain, data=csv_data, timeout=1200)

然后在render_task方法中,根据长任务的状态将元数据添加到作业中:
current_job = get_current_job()
current_job.meta['state'] = 'PROGRESS'
current_job.meta['process_percent'] = process_percent
current_job.meta['message'] = 'YOUTUBE'
current_job.save()

现在,我们有了另一个端点,该端点获取当前任务及其元数据,并将其传递回客户端(这通过特殊的AJAX请求进行)

我们如何在不阻止其他作业的情况下同时运行作业?我们应该动态创建队列吗?有没有一种方法可以利用 worker 来实现这一目标?

最佳答案

据我所知,RQ没有任何设施来管理多名 worker 。您必须启动一个新的工作进程,以定义它将使用的队列。一种对我而言效果很好的方法是使用Supervisor。在主管中,您可以为给定队列和并发进程数配置工作程序。例如,您可以将“高优先级”队列与5个工作人员队列,将“低优先级”队列与1个工作人员队列。

关于python - 如何在Python-RQ中创建多个worker?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32598945/

10-11 22:30