如何在用户给定的特定时间自定义芹菜作业?

时间:2016-10-20 10:13:42

标签: python django celery

我必须使用django创建一个带有用户界面的应用程序,所以现在我将有一个用户界面,用户将从下拉列表中选择某个mp3.file,他将选择一些日期和时间。那时我的服务器必须安排那个特定的工作,它必须按时完成。

为了在python中执行此操作,我现在尝试了计划 apschedule ,但我无法在给定时间运行作业(可能有很多作业要运行)

然后我得到了一个像使用芹菜的建议 - 我在这里有一些疑问:

  1. 芹菜仅用于在预定时间安排n个作业吗?
  2. 2.我可以使用celery从数据库过滤数据时间和文件名后运行作业吗?

    1. 这是在芹菜中安排工作的唯一方法,还是可以通过过滤数据库中的数据来自定义?
    2. 
      
      CELERYBEAT_SCHEDULE = {
          # Executes every Monday morning at 7:30 A.M
          'add-every-monday-morning': {
              'task': 'tasks.add',
              'schedule': crontab(hour=7, minute=30, day_of_week=1),
              'args': (16, 16),
          },
      }
      
      
      

2 个答案:

答案 0 :(得分:0)

您可以使用ETA参数动态安排任务,例如使用从数据库模型获取的DateTime:

dt = SomeModel.objects.get(pk=12345).datetimefield
add.apply_async((2, 2), eta=dt)

eta必须是具有时区信息的日期时间对象。任务将在 指定的日期和时间之后或之后执行 - 由于许多任务在队列中等待或网络延迟,可能会出现延迟。有关详细信息,请参阅文档here

答案 1 :(得分:0)

有两种方法。一个是countdown,另一个是eta。任何方式eta都将在幕后转换为倒计时。

>>> from datetime import datetime, timedelta

>>> tomorrow = datetime.utcnow() + timedelta(days=1) #will work after 24 hour
>>> add.apply_async((2, 2), eta=tomorrow)

了解更多http://docs.celeryproject.org/en/latest/userguide/calling.html#eta-and-countdown