芹菜的工人过程

时间:2019-09-26 07:05:16

标签: python celery

我有一个CPU密集型Celery任务,在其中一个任务中,可以使用joblib进一步并行化它。默认情况下,以celery启动工作人员时,将创建一个最大并发数等于CPU /核心数(在我的情况下为36)的池。

我的问题是,使用此配置,是否意味着每个工作进程将只有一个核心可供使用,并且不会从joblib的并行化中受益?否则,当工作队列中没有其他任务时,它将使用所有内核。

例如:

@app.task  # picked by celery worker process
def a_task():
    algo = Algo(n_jobs=5)  # further parallelization in the task
    ....

1 个答案:

答案 0 :(得分:1)

不,不是。 -Celery不能将工作进程限制为使用单个内核。由操作系统决定如何分散这36个工作进程的负载,但是可以的,您可以说每个进程都有一个要运行的核心。只是提醒您,工作进程几乎不占用CPU。大部分的CPU时间将由joblib使用。

由Celery辅助进程执行的任务使用joblib.Parallel,无论选择哪个后端(多处理或线程),最终都会导致过度使用。 (我认为在这种情况下,将joblib.Parallel与n_jobs = 1一起使用是没有意义的)

这意味着在高负载下,计算机上的每个内核将运行1个Celery worker进程,以及许多(取决于j_jobs值)joblib。并行进程或线程(取决于后端设置)。

相关问题