首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

celery +redis missed heartbeat from celery

  •  
  •   eteryao · 23 天前 · 953 次点击
    业务逻辑是这样的。前端会传一堆参数给我,然后我收到请求之后需要先返回给前端 告知 我收了请求 要开始处理数据了。然后这里应该是走异步,处理数据。处理完数据之后再给中间层 node 发一个请求 告知处理完成了。剩下的是 node 层的事情了。
    现在遇到的问题是:用 celery+redis 经常出去 missed heartbeat from celery 的问题。然后再执行业务逻辑 就不产出任何日志了。直接就假死了。

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

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

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

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