V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  RQ

关于长时间运行的 rqworker

  •  
  •   Livid · 2014-03-14 09:12:12 +08:00 · 9738 次点击
    这是一个创建于 3940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近发现一个奇怪的问题,貌似如果一个 rqworker 运行的时间太长,就会丢失 queue 的名字?也就是从 rqinfo 里看的话,那个 worker 背后是没有名字的。

    有人也遇到过这个问题么?
    16 条回复    1970-01-01 08:00:00 +08:00
    0bit
        1
    0bit  
       2014-03-14 09:25:21 +08:00
    很少用rqinfo看,一直用的rq-dashboard来看,但是queue太多的话,页面可能会刷新不了。
    humiaozuzu
        2
    humiaozuzu  
       2014-03-14 09:27:21 +08:00
    话说 Livid 有用 rq 跑 schedule 嘛?还是都用 crontab 做的?
    geew
        3
    geew  
       2014-03-14 09:52:43 +08:00
    @humiaozuzu rq 可以在程序里调用添加的 crontab也行吗?
    humiaozuzu
        4
    humiaozuzu  
       2014-03-14 10:05:20 +08:00
    @geew 这里他是单独开的一个进程跑 worker
    https://github.com/ui/rq-scheduler
    ericFork
        5
    ericFork  
       2014-03-14 11:58:54 +08:00
    借贴求教一下,有没有用 django-rq 的?你们是如何起多个 worker 的?
    muxi
        6
    muxi  
       2014-03-14 12:03:08 +08:00
    rq scheduler 不能删除,这个很蛋疼
    BeanYoung
        7
    BeanYoung  
       2014-03-14 12:38:53 +08:00 via iPhone   ❤️ 2
    估计是任务超时 任务执行代码里没有对JobTimeException处理 超时后依然在运行 导致worker的信息在redis里过期
    Livid
        8
    Livid  
    MOD
    OP
       2014-03-14 12:52:22 +08:00
    @BeanYoung 多谢提示。这个确实是一个有可能发生的原因。
    Sokos
        9
    Sokos  
       2014-03-14 12:55:00 +08:00
    遇到过, 和 @BeanYoung 说的情况一样。
    Livid
        10
    Livid  
    MOD
    OP
       2014-03-14 15:14:43 +08:00
    @humiaozuzu 我是用 supervisord 来启动 rqworker。
    zhy0216
        11
    zhy0216  
       2014-03-14 15:35:30 +08:00
    @Livid 可以给rq加个sentry, 然后就知道具体错误位置了~
    VYSE
        12
    VYSE  
       2014-03-14 16:17:20 +08:00   ❤️ 2
    @BeanYoung 不过我用默认的rqworker命令行, JobTimeoutException会被handle_exception处理,然后置为failed,enqueue得到的result也是能拿到JobTimeoutException,理论上这时queue还会正常工作。

    从我这来看,消失的worker过段时间还会出现,可能是signal.alarm 超时信号没有返回到handler,rqworker还是等任务超时结束后才继续运行。
    VYSE
        13
    VYSE  
       2014-03-14 17:01:34 +08:00   ❤️ 1
    @VYSE 果然是worker里的某个native ext直接忽略SIGINT/SIGALRM等信号,还是改rq开新进程monitor woker进程靠谱些。
    Livid
        14
    Livid  
    MOD
    OP
       2014-03-14 18:34:00 +08:00
    @VYSE 给他们官方来一发 issue?

    https://github.com/nvie/rq
    VYSE
        15
    VYSE  
       2014-03-14 19:50:10 +08:00
    https://github.com/nvie/rq/issues/323
    不过不报希望会搞定,上次报另外一个就直接close了.
    Livid
        16
    Livid  
    MOD
    OP
       2014-03-15 07:27:13 +08:00
    所以我估计我这里问题的根源是,task 里的 requests 发的请求没有加 timeout 设置。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.