Python 芹菜工人公平地完成任务

Python 芹菜工人公平地完成任务,python,django,Python,Django,我在做芹菜工人。我有一些问题 我使用4个芹菜工人并发3。他们为同一份工作而工作。他们在看同一个队列。 当我做任务时,我一次做4个任务。但每项任务都需要不同的时间。 是这样的: task_list = [task1,task2,task3,task4] # task1 : takes 10s # task2 : takes 30s # task3 : takes 50s # task4 : takes 70s for task in task_list: result = current

我在做芹菜工人。我有一些问题

我使用4个芹菜工人并发3。他们为同一份工作而工作。他们在看同一个队列。 当我做任务时,我一次做4个任务。但每项任务都需要不同的时间。 是这样的:

task_list = [task1,task2,task3,task4]
# task1 : takes 10s
# task2 : takes 30s
# task3 : takes 50s
# task4 : takes 70s

for task in task_list:
    result = current_app.send_task("task_queue",(task),)

它被发送到工人正在查看的同一队列。 当我创建多组任务时,我希望:

Worker1: task1, task4,....
Worker2: task2, task3,...
Worker3: task3, task2,...
Worker4: task4, task1,...
这样每个工人都能公平地工作 但我实际经历的是:

Worker1: task1, task1, task1,....
Worker2: task2, task2, task2,...
Worker3: task3, task3, task3,...
Worker4: task4, task4, task4,...
由于这种情况,当一些工人努力工作时,其他工人什么也不做。 我试着给任务增加优先级,并为芹菜工人使用额外的选项,但没用

下面是激活芹菜工人时的命令行

celery -A django-project worker -n worker01 -Q task_queue -l DEBUG -O fair --prefetch-multiplier 1 --concurrency=3
celery -A django-project worker -n worker02 -Q task_queue -l DEBUG -O fair --prefetch-multiplier 1 --concurrency=3
celery -A django-project worker -n worker03 -Q task_queue -l DEBUG -O fair --prefetch-multiplier 1 --concurrency=3
celery -A django-project worker -n worker04 -Q task_queue -l DEBUG -O fair --prefetch-multiplier 1 --concurrency=3

有这样的情况吗?或者这种情况有什么解决办法吗?

目前,我所能做的就是将任务序列重新排列,使相同数量的任务可以分配给不同数量的工作人员

import random

...
task_list = [task1,task2,task3,task4]

random.shuffle(task_list)

for task in task_list:
    result = current_app.send_task("task_queue",(task),)

我希望我能找到另一种方法来公平地将任务发送给员工

此时,我所能做的只是将任务序列重新排列,使相同数量的任务可以发送给不同数量的员工

import random

...
task_list = [task1,task2,task3,task4]

random.shuffle(task_list)

for task in task_list:
    result = current_app.send_task("task_queue",(task),)
我希望我能找到另一种方法,公平地将任务发送给工人