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

celery +redis missed heartbeat from celery

  •  
  •   eteryao · 2019-10-21 14:02:46 +08:00 · 5466 次点击
    这是一个创建于 1852 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务逻辑是这样的。前端会传一堆参数给我,然后我收到请求之后需要先返回给前端 告知 我收了请求 要开始处理数据了。然后这里应该是走异步,处理数据。处理完数据之后再给中间层 node 发一个请求 告知处理完成了。剩下的是 node 层的事情了。
    现在遇到的问题是:用 celery+redis 经常出去 missed heartbeat from celery 的问题。然后再执行业务逻辑 就不产出任何日志了。直接就假死了。

    问:
    1. 还有别的异步实现这个业务逻辑的办法吗?
    2. celery 的这个问题 要怎么解决、、
    求大佬啊。
    24 条回复    2021-04-11 18:12:51 +08:00
    Ritter
        1
    Ritter  
       2019-10-21 14:08:59 +08:00
    没遇到过
    Latin
        2
    Latin  
       2019-10-21 14:09:01 +08:00
    实时 rabbitmq+celery ?
    Latin
        3
    Latin  
       2019-10-21 14:09:45 +08:00
    试试
    wuwukai007
        4
    wuwukai007  
       2019-10-21 14:11:01 +08:00
    apscheduler
    wuwukai007
        5
    wuwukai007  
       2019-10-21 14:14:03 +08:00
    看下 redis 和 celery 日志,可能是 redis 问题,
    eteryao
        6
    eteryao  
    OP
       2019-10-21 14:20:09 +08:00
    @wuwukai007 谢谢大佬回复。我看了一下 apscheduler 好像是定时任务? 我现在的业务并不是定时任务。就是一个后端接口,收到访问请求了就走异步任务。
    wuwukai007
        7
    wuwukai007  
       2019-10-21 14:24:38 +08:00
    apscheduler 定时异步都可以的,轻量级的,定时里面下次执行时间是立即执行不就是异步了吗
    wuwukai007
        8
    wuwukai007  
       2019-10-21 14:26:14 +08:00
    https://www.jianshu.com/p/4f5305e220f0 文档,不过需要跑一个 web 放在 web 里面
    sujin190
        9
    sujin190  
       2019-10-21 14:26:35 +08:00
    不是据说 celery backbend 用 redis 支持不是特别好么,最简单就换个 backbend 呗,rabbitmq 的支持应该不错
    之前用 go 实现过分布式 event,用在这个场景估计也不错
    Caratpine
        10
    Caratpine  
       2019-10-21 15:03:42 +08:00
    1.
    别的解决方案 Python 的话还有 Huey 和 RQ

    2.
    Celery 是最新的版本吗?
    可以用 Rabbitmq 代替 Redis 试试
    Hstar
        11
    Hstar  
       2019-10-21 15:08:01 +08:00
    之前遇到过,搜了下是 redis 的问题。
    ospider
        12
    ospider  
       2019-10-21 15:41:31 +08:00
    没事儿别用 celery,就是个大坑
    JasperYanky
        13
    JasperYanky  
       2019-10-21 15:57:49 +08:00
    huey 挺好用的 之前就是 celery 太重了才选 huey 的
    Philippa
        14
    Philippa  
       2019-10-21 16:12:19 +08:00 via iPhone
    可以用云,是我就建个 serverless 函数来处理,简洁到起飞🛫️。请求少还不用花钱。

    自建的话,如果不需要集群可以直接建个 api 触发然后跑脚本就可以了,日志输出可以 debug 就行。

    Celery 很重。Airflow 我也用过,再也不想碰 Celery 和 Airflow 了。
    eteryao
        15
    eteryao  
    OP
       2019-10-21 16:16:26 +08:00
    @Caratpine 感谢大佬回复。我是一个新人,所以问的问题太蠢的话 大佬们别见怪。
    1. huey 的话 想问一下 有后台一直跑的方式吗。因为部署的方式是用 docker 现在的 celery 是用 supervisor 在后台守护进程跑的。
    RQ 的话我还得 再研究一下。
    2.celery 不是最新的。因为公司 redis 版本较低 会导致 kombu 这个包报错。
    公司用的是阿里的 rocketMQ 不知道 celery 是否兼容。
    Caratpine
        16
    Caratpine  
       2019-10-21 16:31:08 +08:00
    @eteryao #15 没关系,互相学习。
    1. Huey 不也可以用 Docker 或者 Supervisor 运行的。这个比较简单,源码也易于扩展修改,如果只是想要发异步任务的话,Huey 基本满足需求。
    2. 你的这个问题之前我也没有遇到过,不过我觉得升级版本应该能解决部分问题。Celery 不支持 RocketMQ, 支持最好的是 Rabbitmq. 如果你想用公司的 RocketMQ, 可以考虑用 Huey. 这个比较好改,我们内部一个系统异步任务用的 Huey + 自研的队列。
    hanssx
        17
    hanssx  
       2019-10-21 17:30:02 +08:00
    换用 rmq 吧,redis 不建议使用在生产环境中。
    前几天我使用 celery v4.3 + rmq 3.7.7 也遇到了你这问题,好像是网络原因,你不会和我一样执行得是扫描任务吧?
    话说这个问题不应该是 INFO 吗?不是 ERROR 吧。
    可以尝试把 heartbeat 关掉。
    https://stackoverflow.com/questions/21132240/celery-missed-heartbeat-on-node-lost
    eteryao
        18
    eteryao  
    OP
       2019-10-21 18:57:51 +08:00
    去 redis 看 发现了 celery NotRegistered 的错误。也是无语。。这又是什么鬼
    leafsummer
        19
    leafsummer  
       2019-10-21 19:32:18 +08:00
    遇到过类似的问题:
    1. 如果是多台机器, 看是不是, 几个服务器的时间不一致
    2. 有可能是网络延迟问题
    eteryao
        20
    eteryao  
    OP
       2019-10-22 09:49:31 +08:00
    @Caratpine 大佬能加个联系方式的嘛
    eteryao
        21
    eteryao  
    OP
       2019-10-22 19:27:54 +08:00
    @Hstar 具体是什么问题? 版本低?还是本身就喝 celery 不怎么兼容?
    Caratpine
        22
    Caratpine  
       2019-10-23 11:15:21 +08:00
    @eteryao #20 可以邮箱联系
    eteryao
        23
    eteryao  
    OP
       2019-10-23 22:06:49 +08:00
    @Caratpine 大佬邮箱多少!
    UgFly1210
        24
    UgFly1210  
       2021-04-11 18:12:51 +08:00
    @eteryao 如果 task 相关代码正确发布的话,那就是 celery 没重启
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1355 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.