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

不能让芹菜经营每一处房产

  •  0
  • Gromer  · 技术社区  · 14 年前

    我正在尝试创建一些芹菜周期性任务,其中一些任务需要能够在运行时每次更改运行。芹菜文档说我应该能够通过将run-each属性转换为属性来实现这一点。( http://packages.python.org/celery/faq.html#can-i-change-the-interval-of-a-periodic-task-at-runtime )

    以下是我要做的:

    class ParseSomeStuffTask(PeriodicTask):
    
        def run(self, **kwargs):
            # Do stuff
    
        @property
        def run_every(self):
            if datetime.now().weekday() in [1, 2, 3]:
                return timedelta(minutes=15)
            else:
                return timedelta(seconds=40)
    

    不幸的是,当我打开celerybeat时,我得到以下错误:

    [2010年9月9日星期四15:44:40: 批评/828]:芹菜节拍提高 例外: “datetime.timedelta”对象没有 属性“到期”

    然后关闭。芹菜的文档并没有真正涉及到每一处房产的收益,我在搜索谷歌时也没有任何运气。CeleryChangeLogs表示,自1.0.0版以来,它可以在运行时更改周期性任务的间隔。

    开发环境:

    • Python 2.6
    • Django1.2.1
    • 芹菜2.0.2
    1 回复  |  直到 14 年前
        1
  •  3
  •   asksol    14 年前

    芹菜2.0支持不同的时间表行为。有 celery.task.schedules.schedule celery.task.schedules.crontab .

    您必须返回其中一个,或者创建自己的日程子类。

    from celery.task.schedules import schedule
    
    @property
    def run_every(self):
        if datetime.now().weekday() in [1, 2, 3]:
            return schedule(timedelta(minutes=15))
        else:
            return schedule(timedelta(seconds=40))
    

    这个 run_every 属性将在实例化时自动转换, 但不是以后。