如何在请求之间交替,确保芹菜的公平性



我正在使用芹菜来运行长时间运行的任务(每个任务~20分钟)。每当用户提交请求时,我都会为该用户安排 ~10 个芹菜任务。因此,来自用户的单个请求需要 200 分钟才能完成。当其他用户提交请求时,会出现此问题。第二个用户的任务会等到第一个用户发出的所有任务完成。我的问题是,有没有办法在这两个用户之间交替。

当前场景:用户 A(10 个

任务),用户 B(10 个任务)。

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

所需序列:

A,B,A,B,A,A,B,B,A,A,B,B,A,B,A我

像这样运行我的任务。

run_task.delay(user_id_here)

此外,上述方案不限于两个用户。为了简单起见,我一直保持这种方式。另外,由于内存限制,我只能生成一个芹菜工人。因此,为每个用户生成一个动态工作线程是行不通的。

谢谢。

一种可能的解决方案是使用不同的队列将用户任务(随机)路由到单独的芹菜工人身上。这可能不会给你完全相同的预期行为,但它会减少任务等待时间。

在终端中:

$ 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)

相关内容

  • 没有找到相关文章

最新更新