gpt4 book ai didi

python - 如何在确保 celery 公平性的请求之间交替?

转载 作者:行者123 更新时间:2023-12-03 17:00:30 25 4
gpt4 key购买 nike

我正在使用 celery 来运行长时间运行的任务(每个任务约 20 分钟)。每当用户提交请求时,我都会为该用户安排大约 10 个 celery 任务。因此,来自用户的单个请求需要 200 分钟才能完成。当另一个用户提交请求时,问题就出现了。第二个用户的任务等待第一个用户发出的所有任务完成。我的问题是,有没有办法在这两个用户之间进行切换。

当前场景:用户 A(10 个任务),用户 B(10 个任务)..

执行顺序:A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B

所需序列:A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B

我这样运行我的任务。

run_task.delay(user_id_here)

此外,上述场景不限于两个用户。为了简单起见,我一直保持这种方式。此外,由于内存限制,我只能产生一个 celery worker 。因此,为每个用户生成一个动态 worker 是行不通的。

谢谢。

最佳答案

一个可能的解决方案是 route您的用户使用不同的队列(随机)在不同的 celery worker 上执行任务。这可能不会为您提供完全相同的预期行为,但会 reduce task 等待时间。

在终端中:

$ celery -A my_app worker -l info  -c 1 -n my_worker1 -Q queue1
$ celery -A my_app worker -l info -c 1 -n my_worker2 -Q queue2
$ celery -A my_app worker -l info -c 1 -n my_worker3 -Q queue3

在您的tasks.py中:

selected_queue = select_queue() # select_queue is function that you may implement yourself to change each time between the queues
my_task.apply_async(args=my_args, queue=selected_queue)

关于python - 如何在确保 celery 公平性的请求之间交替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com