代码之家  ›  专栏  ›  技术社区  ›  Matt

芹菜任务未超时

  •  0
  • Matt  · 技术社区  · 8 年前

    我想验证为芹菜任务设置时间限制是否有效。

    我目前的配置如下:

    CELERYD_TASK_SOFT_TIME_LIMIT = 30
    CELERYD_TASK_TIME_LIMIT = 120
    
    task_soft_time_limit = 29
    task_time_limit = 44_LIMIT = 120
    

    我正在重载超时参数,因为似乎有 name change coming 我只想确保我至少超时一次。

    但是当我在调试器中运行测试时 app.conf 字典如下所示:

    (Pdb) app.conf['task_time_limit'] == None
    True
    (Pdb) app.conf['task_soft_time_limit'] == None
    True
    (Pdb) app.conf['CELERYD_TASK_SOFT_TIME_LIMIT']
    30
    (Pdb) app.conf['CELERYD_TASK_TIME_LIMIT']
    120
    

    我写了一个测试,我相信它会触发超时,但从来没有出现过错误:

    @app.task(soft_time_limit=15)
    def time_out_task():
        import time
        count = 0
        #import pdb; pdb.set_trace()
        while count < 1000:
            time.sleep(1)
            count += 1
            print(count)
    

    我的问题如下:

    1. 我应该为软时限和硬时限设置什么样的圆锥形设置?
    2. 我怎么能在一个测试中执行一个任务,这个测试向我证明了时间限制已经到位了。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Matt    8 年前

    我通过改变测试方式和导入芹菜配置的方式解决了这个问题。

    最初,我通过导入Django设置对象来设置配置:

    app = Celery('groot')
    app.config_from_object('django.conf:settings', namespace='CELERY')  
    

    但这忽略了 CELERYD_... 前缀因此,我使用了新的符号并调用了以下方法:

    app.conf.update(
        task_soft_time_limit=30,
        task_time_limit=120,
    )
    

    我还将测试从在Django测试环境中进行更改为启动一个实际的芹菜工作者并将任务发送给工作者。 如果有人能提供如何在单元测试中测试超时设置的解决方案,我们将不胜感激。

        2
  •  0
  •   ibuler    7 年前

    在django设置中,CELERY\u TASK\u TIME\u LIMIT对我有效

    CELERY_TASK_TIME_LIMIT = 60