Fat*_*ppo 5 django celery celerybeat djcelery
*使用celery 3.1.25,因为django-celery-beat 1.0.1在安排定期任务方面存在问题。
最近,我遇到了一个关于celerybeat的问题,该问题导致调度程序似乎忘记了间隔一天或更长的定期任务。如果我更改时间间隔,every 5 seconds 则任务将正常执行(每5秒),并且last_run_at属性会更新。这意味着celerybeat在一定程度上响应了调度程序,但是如果我重置last_run_atie PeriodicTask.objects.update(last_run_at=None),则every day不再有运行间隔的任务。
Celerybeat在某一时刻崩溃,并且可能损坏了某些内容,因此我创建了一个新的virtualenv和数据库,以查看问题是否仍然存在。我想知道是否有一种方法可以检索下一次运行时间,这样我就不必等待一天就可以知道我的定期任务是否已执行。
我也尝试过使用,inspect <active/scheduled/reserved>但全部归还empty。使用djcelery的数据库调度程序执行定期任务是否正常?
这是安排任务的功能:
def schedule_data_collection(request, project):
if (request.method == 'POST'):
interval = request.POST.get('interval')
target_project = Project.objects.get(url_path=project)
interval_schedule = dict(every=json.loads(interval), period='days')
schedule, created = IntervalSchedule.objects.get_or_create(
every=interval_schedule['every'],
period=interval_schedule['period'],
)
task_name = '{} data collection'.format(target_project.name)
try:
task = PeriodicTask.objects.get(name=task_name)
except PeriodicTask.DoesNotExist:
task = PeriodicTask.objects.create(
interval=schedule,
name=task_name,
task='myapp.tasks.collect_tool_data',
args=json.dumps([target_project.url_path])
)
else:
if task.interval != schedule:
task.interval = schedule
if task.enabled is False:
task.enabled = True
task.save()
return HttpResponse(task.interval)
else:
return HttpResponseForbidden()
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过进入 shell 并查看 app.conf.CELERYBEAT_SCEDULE 来查看您的调度程序。
celery -A myApp shell
print(app.conf.CELERYBEAT_SCHEDULE)
Run Code Online (Sandbox Code Playgroud)
这应该会显示您所有的定期任务。
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |