【发布时间】:2019-11-23 12:34:00
【问题描述】:
我尝试在 celery 工作进程中运行任务时获取当前线程 ID 和进程 ID。 我已将预取乘数设置为 1,并且我有 4 个 cpu 核心机器,因此每个工作人员将运行 4 个工作进程。 我只有 1 个工作人员在运行(4 个工作进程)。
据我了解,每个工作进程实际上都在处理任务的执行。当我同时运行 4 个任务时,我尝试分别使用 os.getpid() 和 threading.get_ident() 在任务中获取进程 ID 和线程 ID。
毫不奇怪,对于每个运行的任务,我得到相同的一组 4 个 process_id(因为有 4 个工作进程正在运行),但每个进程的线程 id 是相同的。我无法理解这怎么可能。
以下是我在运行任务时的观察:
> log: pid id: 513, t_id 140373758563328
> log: pid id: 514, t_id 140373758563328
> log: pid id: 513, t_id 140373758563328
> log: pid id: 513, t_id 140373758563328
> log: pid id: 513, t_id 140373758563328
> log: pid id: 513, t_id 140373758563328
> log: pid id: 578, t_id 140280371217408
> log: pid id: 579, t_id 140280371217408
【问题讨论】:
-
你是如何运行 celery 的? Prefork/gevent?
-
@IainShelvington 我正在运行 prefork 池
-
粘贴你正在运行的 celery 命令?
-
@sp1rs celery -A project.celery worker -l DEBUG
标签: django multithreading celery celery-task