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

请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?

  •  
  •   praynise · 2017-10-27 21:36:04 +08:00 · 3487 次点击
    这是一个创建于 2569 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前小弟用 celery 搭了一套共 7 个 worker 节点的系统,主要是用于分散数据文件生成的任务,避免单个节点 I/O 过高,性能太差。目前小弟有几个问题:
    1、一次性大量通过 apply_async 调用异步任务时,worker 对任务的获取是抢占式的,导致各个节点上的任务并不平均,有的节点早早就结束了所有的任务闲了下来,但是其他节点还在埋头苦干,请问 celery 有什么负载均衡的办法吗?如何让加入队列的任务平均分配在每个 worker 节点上呢?
    2、worker 对于任务是先抢光队列里面的所有任务,然后再执行任务。请问是否有办法让每个节点只获取 worker_concurrency 数量的任务,哪个 process 完成了再去队列中获取呢?
    谢谢大家~
    9 条回复    2017-10-30 13:47:38 +08:00
    GooMS
        1
    GooMS  
       2017-10-27 21:48:32 +08:00 via Android
    这个问题不应该解决队列吧。
    能详细讲讲具体做什么吗?这个抢占指的又是什么?是网络还是?有 ack 吗?
    gamexg
        2
    gamexg  
       2017-10-27 21:51:00 +08:00
    记得有个参数可以设置 worker 一次取几个任务,设置为 1 就好。
    具体的需要查文档了。
    herozem
        4
    herozem  
       2017-10-27 21:54:52 +08:00
    有个 prefetch_count. 如果这个还觉得不够, 可以参考一下我写的一个任务框架

    https://github.com/jiajunhuang/toq

    里面有个模式是 sleepy mode, 如果任务过多,就会停止拉取任务
    DoctorCat
        5
    DoctorCat  
       2017-10-27 21:57:30 +08:00
    1. 给每个 worker 合理的设定--concurrency、--autoscale 参数
    2. 同问题 1,有没有其他答案观察 ing
    praynise
        6
    praynise  
    OP
       2017-10-27 22:29:59 +08:00
    @herozem 膜拜下大神…
    est
        7
    est  
       2017-10-27 22:52:20 +08:00
    别用 celery 了 用 dask
    praynise
        8
    praynise  
    OP
       2017-10-27 23:22:11 +08:00
    @est dask 不是类 pandas 的数据处理包吗…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 20:02 · PVG 04:02 · LAX 12:02 · JFK 15:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.