我有一个为多个用户提供服务的Django应用程序。每个用户都可以提交要执行的资源密集型任务(数分钟至数小时)。我想基于公平分配资源来执行任务。后端使用Celery和RabbitMQ来执行任务。
我已经进行了广泛的研究,但无法为我的特殊情况找到任何解决方案(或者无法将其组合在一起。)据我所知,没有任何内置功能可以在Celery和RabbitMQ中做到这一点。是否可以使用自定义代码来处理任务的执行顺序?这将允许根据用户数据计算优先级,并选择下一步应执行的任务。
AMPQ队列是FIFO。因此,不可能从队列中间抓取项目来执行。我想到的两个解决方案是:
a。)如另一篇文章所述,使用锁来限制用户的资源。
b。)有2个队列;提交队列和执行队列。提交队列根据您选择实现的任何算法,使执行队列充满工作。这可能会更复杂,但可能会更符合您的需求。