【发布时间】:2019-10-09 16:20:56
【问题描述】:
我正在使用 django + celery 任务调度程序来运行每月安排一次的任务。但我只想让这个任务运行几个月,例如 3 个月或 6 个月或 9 个月..
如何阻止工作人员执行进一步的任务,然后在再次调用该任务时重新启动?
这是我的任务
@task(name="add_profit")
def count():
portfolios = Portfolio.objects.filter(status='ACTIVE')
if portfolios.exists():
for portfolio in portfolios:
user = portfolio.user
#calculates portfolio profit
amount = portfolio.amount * 0.1
if portfolio.duration == '3 Months':
PortfolioProfit.objects.create(user=user, amount=amount)
user.useraccount.account_balance += amount
user.useraccount.save()
这是我的芹菜任务时间表
app.conf.beat_schedule = {
# Executes 1st day of every Month.
'every-minute': {
'task': 'add_profit',
# crontab can be changes to change Schedule
# http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
'schedule': crontab(0, 0, day_of_month = 1),
},
}
【问题讨论】:
-
为了便于阅读,您可以将
'every-minute'重命名为'every-month' -
我以为我理解了这个问题。由于您添加了代码 sn-ps 我不太确定。现在看来,您希望每个月都调用 celery 任务,并且某些投资组合的任务中的某些操作应该只在有限的时间内执行。到目前为止,我给你的答案是仅在一定个月内调用 celery 任务。请你澄清一下。如果您只想在有限的时间内对一个特定的投资组合执行任务,那么最好更改模型,以便您可以存储它是否仍需要调用。
-
基本上这些任务会被用户随机触发。根据他们选择的投资组合的持续时间,然后此任务将每月为他们的帐户余额增加一定的金额,有些是 3 个月,有些是 6 个月..等等。并且这些任务应该针对所有处于活动状态的投资组合运行。
标签: python django redis celery