【问题标题】:How to run long running task behind the scence in django class based view?如何在基于 Django 类的视图中在幕后运行长时间运行的任务?
【发布时间】:2023-01-25 00:45:25
【问题描述】:

我想在基于 Django 类的 Redirectview 中运行长时间运行的任务。在此运行任务完成之前,我想返回模板。这是我的代码。

我尝试使用此代码。

class Redirect_to_page(RedirectView):
    async def sleep_long(self):
        for i in range(1,10):
            print(f'Run {i}')
            await asyncio.sleep(1)
        pass
    query_string = True
    pattern_name = 'pages:redirect_page'
    
    def get_redirect_url(self, *args, **kwargs):
        asyncio.run(self.sleep_long())
        print('This run before complete!')
        return super().get_redirect_url(*args, **kwargs)

这就是结果。

Run 1
Run 2
Run 3
Run 4
Run 5
Run 6
Run 7
Run 8
Run 9
This run before complete!

但我想要这样的结果_

Run 1
This run before complete!
Run 2
Run 3
Run 4
Run 5
Run 6
Run 7
Run 8
Run 9

【问题讨论】:

    标签: python-3.x django python-asyncio django-class-based-views


    【解决方案1】:

    目前还不清楚,因为你质疑你到底想完成什么。一般来说,异步任务可以通过集成 3rd party workers 来运行。 Celery 是一个非常流行的,并且具有直接的 django 集成。

    文档在这里:https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html 简单的博文在这里:https://realpython.com/asynchronous-tasks-with-django-and-celery/

    我对芹菜有很好的体验,强烈推荐。

    您可以创建一个任务来负责处理您的业务逻辑,并在您的视图中分派该任务。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多