【问题标题】:Celery pool processes, tasks, and system processes & memory spaceCelery 池进程、任务和系统进程和内存空间
【发布时间】:2019-10-17 22:27:13
【问题描述】:

每个任务都在唯一的进程空间中执行?

  • Celery 池(不是 Master)进程是否为每个任务执行生成一个进程?
  • 换句话说,是否每个任务都通过一个由工作池进程产生的新进程执行?

还是相反?

  • 任务作为工作池进程的一部分执行?
  • 其中一个含义:如果 celery 任务依赖于存储在进程内存空间中的数据,则该数据是正在执行它的工作池进程的一部分。而且,工作池进程执行的所有任务都可以访问该数据副本。

【问题讨论】:

    标签: python celery django-celery celery-task celeryd


    【解决方案1】:

    这些详细信息取决于您为员工选择的concurrency model

    在默认的 prefork 模型(基于进程)中,每个任务都在一个 prefork 进程(工作进程)中执行。所以是的 - 它是一个进程池。您可以配置 Celery 为每个任务创建一个新的工作进程,但这不是默认行为。默认情况下,Celery 不会用新的工作进程替换旧的工作进程,但您可以通过 worker_max_tasks_per_child 设置来控制它。

    【讨论】:

    • 谢谢@DejanLekic。我不确定,尤其是文档“Where -n worker1@example.com -c2 -f %n-%i.log 将导致三个日志文件”的部分。这似乎表明,池进程与每个工作进程相同。也就是说,worker 进程和 pool 进程似乎是同义词?
    猜你喜欢
    • 2012-02-20
    • 2011-08-19
    • 2019-02-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多