假设我们有以下 Web 服务。主要功能是为给定的网站 URL 进行屏幕截图。有用于输入 URL 的 REST API 和用户界面。每个新 URL 都会在 Celery 中创建一个任务。对于前端 UI,某些 URL 的屏幕将在合理的时间(例如 10 秒)内跟随很重要。
现在,用户有意或由于软件错误输入了数百个 URL。这会使任务队列膨胀,其他用户必须等到所有这些任务都完成。
所以这里的要求是:
- 以某种公平的顺序运行任务。最简单的解决方案是一次为每个用户运行一项任务。比如:user1 任务、user2 任务、user1 任务、user2 任务等等。
- 在任务上有一些优先级。优先级 1 的类似任务总是在优先级 2 的任务之前完成。
目前,我们使用我们手工制作的模块。它将任务存储在 Redis 中,并以公平的顺序将它们推送到 Celery。为了不依赖 Celery 排序,它只推送与可用的空闲 Celery 工作人员一样多的任务,并且每 100 毫秒检查一次 Celery 队列中是否有空闲工作人员。
是否有符合我要求的图书馆或服务?