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

关于 celery 的 taskid 跟 flower 不匹配问题

  •  
  •   akmonde · 2017-08-08 10:20:15 +08:00 · 2048 次点击
    这是一个创建于 2646 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,我这里用 celery 做了一个小东西,是根据任务生成的 id,去针对 flower 上的接口进行监控的。 比如:

    http://www.test.com/api/task/result/fe4f4cd8-cba2-4fc4-8362-6b4ed2402579
    

    但问题来了,我后端脚本使用的是类似于下面这样获取的 id:

    task_id = task.delay(url,host).id
    

    结果我发现这样生成的 id,竟然有部分在 flower 压根找不到。 我检查了下,本以为是我在 task 里面嵌套了 task 的缘故,但去掉 delay 直接调用那个嵌套 task 的主函数也这样。

    按我的理解,task id 不管任务状态为 RECEIVED,还是 STARTED,它的 id 既然用 delay 生成了,应该在 flower 是找的到的,问题现在完全没发现踪迹。 想问问各位大佬,这到底咋回事啊?

    第 1 条附言  ·  2017-08-09 10:15:30 +08:00
    我这边似乎查出了部分原因,那个会出问题的 task,只要执行的数目(包括 STARTED 和 RECEIVED ),只要数目不超过我这边起的 worker 数就不会出问题,后端 task 生成的 id 就能在 flower 里面找的到。

    那么问题来了,有大佬知道什么原因么?

    或者,最不济,咱们这里换种笨办法。
    有大佬愿意给讲下,如何限制指定任务在单机器或者集群里同时存在的个数么(包括 STARTED 和 RECEIVED )?

    我记得好像要把 STARTED 和 RECEIVED 的任务一起限制的话,好像不能限制这种指定的任务个数存在的个数,不知道有没有大佬有办法。
    2 条回复    2017-08-08 16:02:20 +08:00
    siteshen
        1
    siteshen  
       2017-08-08 13:00:26 +08:00
    enqueue 后立即查看 flower,如果当时有,隔段时间没有,可能是配置里没存储结果,被清理了。
    akmonde
        2
    akmonde  
    OP
       2017-08-08 16:02:20 +08:00
    @siteshen 应该不是这个问题,是获取了 task.delay(url,host).id 后马上去搜索,并没有发现。
    然后过了一段时间候,仍然没有。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1297 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:32 · PVG 07:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.