V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bxqqq
V2EX  ›  Python

请教一下关于 celery 子进程(worker),被 kill 的问题

  •  
  •   bxqqq · Jan 15, 2020 · 3240 views
    This topic created in 2304 days ago, the information mentioned may be changed or developed.
    因为不熟悉 celery,所以请教下,项目中执行 task 的时候,主进程会启用子进程(worker)去跑 task,在子 worker 内存占用过高的情况下,会被 kill 掉吗,这种情况下主进程是否会收到信号之类的东西,或者有什么设置,能让主进程知道子 worker 被 kill。还有就是我手动 kill 掉一个子 woker,主进程能够知道吗?
    Supplement 1  ·  Jan 16, 2020
    update:是这样的,web 程序在开始任务之前会用 redis 做 key,设置任务状态,然后 task 的每次主动触发任务的时候要先判断 redis 中的 key 的 value。如果是中途子 worker 因为跑异步任务内存过高被 celery 主进程 kill 了,那就没有办法在任务的最后重置 redis 的 key 了。导致想再次触发此 task 会被 block,想知道在 worker 被 kill 的时候有没有方法可以去重置下 key,在 redis 的 key timeout 之前。
    5 replies    2020-01-16 19:25:50 +08:00
    billlee
        1
    billlee  
       Jan 15, 2020
    1. 主进程知道子进程被 kill.
    2. ( Linux 下)内存占用过高的情况下,内核会开始 kill 进程,被 kill 掉的不一定是 worker 进程。但在内核开始 kill 进程之前,你的系统可能已经变得非常慢。所以不要过度使用内存。
    0dJ6Tu8Za734L89T
        2
    0dJ6Tu8Za734L89T  
       Jan 16, 2020
    蹲一波=大神答,我以前想用 Celery 做一些事情后来换到 APScheduler 了
    cz5424
        3
    cz5424  
       Jan 16, 2020 via iPhone
    被 kill 之后任务就失败了
    fxxkgw
        4
    fxxkgw  
       Jan 16, 2020
    这样是否可行:子进程设置 signal 函数捕捉父进程或者内核发送的 kill 信号,捕捉后,设置 redis 里 key 的 value。
    bxqqq
        5
    bxqqq  
    OP
       Jan 16, 2020
    谢谢 @fxxkgw 我朝这个思路试一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 06:33 · PVG 14:33 · LAX 23:33 · JFK 02:33
    ♥ Do have faith in what you're doing.