如何在芹菜任务中强制 db 提交 django-orm 中的单个保存



我正在使用django和芹菜。我有一个长期运行的芹菜任务,我希望它报告进度。我正在这样做:

@shared_task
def do_the_job(tracker_id, *args, **kwargs):
    while condition:
        #Do a long operation
        tracker = ProgressTracker.objects.get(pk=tracker_id)
        tracker.task_progress = F('task_progress') + 1
        tracker.last_update = timezone.now()
        tracker.save(update_fields=['task_progress', 'last_update'])

问题是,在任务完成之前,应该向用户显示进度的视图无法看到更新。有没有办法让 django orm 忽略这一个表的事务?还是就这一个写?

您可以使用绑定任务为任务定义自定义状态,并在执行期间设置/更新状态:

@celery.task(bind=True)
def show_progress(self, n):
    for i in range(n):
        self.update_state(state='PROGRESS', meta={'current': i, 'total': n})

您可以转储当前正在执行的任务的状态以获取进度:

>>> from celery import Celery
>>> app = Celery('proj')
>>> i = app.control.inspect()
>>> i.active()

相关内容

  • 没有找到相关文章

最新更新