V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2020-01-15 22:22:05 +08:00 · 2832 次点击
    这是一个创建于 1792 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为不熟悉 celery,所以请教下,项目中执行 task 的时候,主进程会启用子进程(worker)去跑 task,在子 worker 内存占用过高的情况下,会被 kill 掉吗,这种情况下主进程是否会收到信号之类的东西,或者有什么设置,能让主进程知道子 worker 被 kill。还有就是我手动 kill 掉一个子 woker,主进程能够知道吗?
    第 1 条附言  ·  2020-01-16 15:24:32 +08:00
    update:是这样的,web 程序在开始任务之前会用 redis 做 key,设置任务状态,然后 task 的每次主动触发任务的时候要先判断 redis 中的 key 的 value。如果是中途子 worker 因为跑异步任务内存过高被 celery 主进程 kill 了,那就没有办法在任务的最后重置 redis 的 key 了。导致想再次触发此 task 会被 block,想知道在 worker 被 kill 的时候有没有方法可以去重置下 key,在 redis 的 key timeout 之前。
    5 条回复    2020-01-16 19:25:50 +08:00
    billlee
        1
    billlee  
       2020-01-15 23:30:23 +08:00
    1. 主进程知道子进程被 kill.
    2. ( Linux 下)内存占用过高的情况下,内核会开始 kill 进程,被 kill 掉的不一定是 worker 进程。但在内核开始 kill 进程之前,你的系统可能已经变得非常慢。所以不要过度使用内存。
    SpencerCJH
        2
    SpencerCJH  
       2020-01-16 01:35:20 +08:00
    蹲一波=大神答,我以前想用 Celery 做一些事情后来换到 APScheduler 了
    cz5424
        3
    cz5424  
       2020-01-16 08:39:51 +08:00 via iPhone
    被 kill 之后任务就失败了
    fxxkgw
        4
    fxxkgw  
       2020-01-16 16:12:21 +08:00
    这样是否可行:子进程设置 signal 函数捕捉父进程或者内核发送的 kill 信号,捕捉后,设置 redis 里 key 的 value。
    bxqqq
        5
    bxqqq  
    OP
       2020-01-16 19:25:50 +08:00
    谢谢 @fxxkgw 我朝这个思路试一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:47 · PVG 16:47 · LAX 00:47 · JFK 03:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.