Вы можете указать значения в аргументах, а затем использовать их при фильтрации QuerySet.
Settings.py
CELERY_BEAT_SCHEDULE = {
'ok_27_0': {
'task' : 'bill.tasks.ok',
'schedule' : crontab(minute=27, hour=0),
'args' : (27, 0)
},
'ok_5_any': {
'task' : 'bill.tasks.ok',
'schedule' : crontab(minute=5),
'args' : (5, None)
}
}
банкнота / tasks.py
from celery import task
@task
def ok(minute=None, hour=None):
bills = Bill.objects.all()
if minute is not None:
bills = bills.filter(minute=minute)
if hour is not None:
bills = bills.filter(hour=hour)
for bill in bills:
perform_something(bill)
Edit:
Вы также можете попробовать связать задачу и посмотреть, сможете ли вы найти расписание для задачи в экземпляре задачи или в ее запросе. Таким образом, вам не придется повторяться в настройках. Однако я не знаю, возможно ли это.
@task(bind=True)
def ok(self):
self.request