我们最近被迫用 RQ 替换 celery,因为它更简单,而且 celery 给我们带来了太多问题。现在,我们无法找到动态创建多个队列的方法,因为我们需要同时完成多个作业。因此,基本上对我们的一个路由的每个请求都应该启动一项工作,让多个用户等待一个用户的工作完成,然后我们才能继续下一个工作是没有意义的。我们会定期向服务器发送请求,以获取作业的状态和一些元数据。这样我们可以用进度条更新用户(这可能是一个漫长的过程,所以为了用户体验必须这样做)
我们正在使用 Django 和 Python 的rq库。我们没有使用django-rq(请让我知道使用它是否有优势)
到目前为止,我们在其中一个控制器中开始了一项任务,例如:
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()
现在我们有了另一个端点,它获取当前任务及其元数据并将其传递回客户端(这通过 oeriodic AJAX 请求发生)
我们如何在不阻塞其他作业的情况下同时运行作业?我们应该动态地创建队列吗?有没有办法利用工人来实现这一目标?