【发布时间】:2019-05-15 06:04:32
【问题描述】:
假设我们有以下模型字段:
class Project(models.Model):
project_name = models.CharField(max_length=200,unique=True)
project_scan = models.IntegerField() ### Scan interval
project_status = models.BooleanField() ### To Enable "Scan" or Disable "Scan" Tasks
假设我们有 2 个项目对象:
1. Project(project_name='test1',project_scan=5) ### Scan `test1` every `5` hour
2. Project(project_name='test2',project_scan=10) ### Scan `test2` every `10` hour
Tasks.py
>@task(name='project_tasks')
def Project_Tasks():
get_all_projects = Project.objects.all()
for each_project in get_all_project:
if each_project.project_status == True: ### Checking if it "Scan" is allowed.
get_interval = each_project.project_scan
get_name = each_project.project_name
print(get_name)
我的问题:
如何根据给定的project_scan Interval 在每个对象上运行任务? , 由于 Celery beat 将任务名称作为参数来执行扫描,例如:
PeriodicTask.objects.create(interval=given_interval, name='I dont know', task='project_tasks', )
如何为每个项目任务创建单独的实例?
我尝试在 models.py 中创建 intervalSchedule 字段,但没有成功:
class Project(models.Model):
project_name = models.CharField(max_length=200,unique=True)
project_scan = models.IntegerField() ### Scan interval
project_status = models.BooleanField() ### To Enable "Scan" or Disable "Scan" Tasks
schedule = IntervalSchedule()
【问题讨论】:
-
您希望在创建新的
Project时创建PeriodTask吗?哦,你在 for 循环中运行什么? -
是的,创建新项目时要创建周期性任务,并根据给定的间隔时间运行一个周期,即
project_scan (hour) -
在下面查看我的答案。如果您有任何问题,请在下方留言。
标签: django django-models celery django-celery celerybeat