我正在使用芹菜来运行长时间运行的任务(每个任务约20分钟)。每当用户提交请求时,我会在芹菜中为该用户安排约10个任务。因此,用户的单个请求需要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
我这样执行我的任务。
employees
此外,上述场景不限于两个用户。为了简单起见,我一直这样做。此外,由于内存限制,我只能产生一个芹菜工人。因此,为每个用户生成一个动态工作者是行不通的。
感谢。
答案 0 :(得分:0)
一种可能的解决方案是使用不同的队列在不同的芹菜工作者上{随机} route用户任务。这可能不会给你完全相同的所需行为,但它会减少任务等待时间。
在终端:
$ 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)