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
Sayihxd
V2EX  ›  Python

Celery 突然报错 esultHandler' crashed OSError("handle is closed"),请教一下各位

  •  
  •   Sayihxd · 2019-10-09 11:56:00 +08:00 · 3025 次点击
    这是一个创建于 1871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    好好跑着的代码,国庆回来突然报错,报错内容是:

    ERROR/ForkPoolWorker-7] Thread 'ResultHandler' crashed: OSError('handle is closed',)
    Traceback (most recent call last):
      File "/root/kvenv/lib/python2.7/site-packages/billiard/pool.py", line 478, in run
        return self.body()
      File "/root/kvenv/lib/python2.7/site-packages/billiard/pool.py", line 866, in body
        self.finish_at_shutdown()
      File "/root/kvenv/lib/python2.7/site-packages/billiard/pool.py", line 883, in finish_at_shutdown
        ready, task = poll(1.0)
      File "/root/kvenv/lib/python2.7/site-packages/billiard/pool.py", line 1326, in _poll_result
        if self._outqueue._reader.poll(timeout):
      File "/root/kvenv/lib/python2.7/site-packages/billiard/connection.py", line 285, in poll
        self._check_closed()
      File "/root/kvenv/lib/python2.7/site-packages/billiard/connection.py", line 165, in _check_closed
        raise OSError("handle is closed")
    OSError: handle is closed
    ERROR/MainProcess] Process 'ForkPoolWorker-7' pid:31664 exited with 'exitcode 1'
    

    查了一上午的 google,只有 celery 的一个 git issue 是一样的报错,里面提到是 gevent 的问题。排查了自己的代码,只有一个地方用到了 gevent,所以 gevent 可能是一个原因。但是奇怪的是,之前一直都没报错过,然后重启程序之后也正常了。

    请问各位大佬:是否有同样碰到过这种问题的,如果有解决方案万分感谢。

    目前准备舍弃 celery,简单用 mq 来做任务的分发了。被坑了两三次了,在这样下去 kpi 没了。

    感谢各位。

    13 条回复    2019-10-09 15:07:35 +08:00
    lspvic
        1
    lspvic  
       2019-10-09 12:07:24 +08:00 via Android
    看来大佬们用 2. 7 的还很多呀
    Sayihxd
        2
    Sayihxd  
    OP
       2019-10-09 12:16:59 +08:00
    @lspvic 历史遗留问题,抱歉抱歉。
    arrow8899
        3
    arrow8899  
       2019-10-09 13:53:00 +08:00   ❤️ 1
    ll /proc/<pid>/fd 看一下
    ulimit -n 看一下
    你的任务是否设置了超时
    感觉像是 socket 文件被关闭了
    TheWalkingDead
        4
    TheWalkingDead  
       2019-10-09 13:55:45 +08:00
    celery 一定要做进程存活的监控。
    qq976739120
        5
    qq976739120  
       2019-10-09 13:58:37 +08:00
    不建议任何人在面向用户的服务上使用 celery,非常多的坑,尤其是进程假死的问题
    chi1st
        6
    chi1st  
       2019-10-09 14:12:02 +08:00
    @qq976739120 那推荐使用什么呢?
    qq976739120
        7
    qq976739120  
       2019-10-09 14:16:55 +08:00
    @chi1st 用 kombu 自己做简单封装,排查问题会简单很多,基本封装看下这里 https://zhuanlan.zhihu.com/p/43264903
    Sayihxd
        8
    Sayihxd  
    OP
       2019-10-09 14:18:29 +08:00
    @arrow8899 感谢。下次复现的时候瞄一眼。
    检查了下,任务没有设置超时。
    ulimit -n 是 4200,正常运行的时候 lsof 看了下能到 3500,所以不排除有这个的原因。
    再次感谢。
    Sayihxd
        9
    Sayihxd  
    OP
       2019-10-09 14:22:08 +08:00
    @TheWalkingDead
    @qq976739120
    感谢两位。
    之前碰见过假死,所以后面设置了定时任务,每隔一段时间杀死所有的 celery 的进程,苟一苟。因为用了 supervisor,杀了之后,supervisor 会再拉起来。
    不知道这样会不会出现问题。
    qq976739120
        10
    qq976739120  
       2019-10-09 14:25:17 +08:00
    @Sayihxd 哈哈哈,跟我们之前一样,然后要问一下,你这个定时任务是怎么做的?假如这个定时任务进程挂了呢?再起个定时任务监控这个定时任务吗
    chi1st
        11
    chi1st  
       2019-10-09 14:32:37 +08:00
    @qq976739120 感谢
    Sayihxd
        12
    Sayihxd  
    OP
       2019-10-09 14:34:28 +08:00
    @qq976739120
    目前搞的比较简单,写了 bash 脚本通过 crontab 来定时调用。
    只不过您提出来的确实是个风险点。
    目前这边也是准备用 rabbitmq 自己封装下了,不然这个时不时出问题太难受了。
    万分感谢
    lolizeppelin
        13
    lolizeppelin  
       2019-10-09 15:07:35 +08:00
    都说了要用 openstack 的 oslo_message
    用什么鬼 celery

    找不到问题就是代码没读透!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:28 · PVG 13:28 · LAX 21:28 · JFK 00:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.