跟踪耗时函数的完成情况并在 Django APIView 响应中提供 CSV 文件

问题描述 投票:0回答:1

我有一个使用 Django 的 APIView 类构建的 API,其中包括两个端点:start_report_ Generation 和 get_csv。当我点击start_report_ Generation端点时,它会触发generate_report函数的执行,该函数执行一项耗时的任务,例如生成报告并创建相应的CSV文件。在使用报告 ID 访问 get_csv 端点时,我想检查generate_report4函数是否已完成执行并提供生成的CSV文件作为响应。如果该函数仍在运行,我想返回一个响应,表明它仍在运行。

class TriggerReportView(APIView):
    def generate_report(self, request):
        report_id = generate_report4()
        return Response({'report_id': report_id}, status=status.HTTP_202_ACCEPTED)

class GetReportView(APIView):
    def get_csv(self, request):
     report_id = req.query_params.get('report_id')
        # How can I track the completion of the `generate_report4` function and serve the CSV file?
        # How do I handle the case when the function is still running?

        return Response({'status': 'Running'})  # Placeholder response for now
or 
       return Response Response(csv_file, content_type="text/csv")
python function csv django-rest-framework tracking
1个回答
0
投票

您应该在

start_report_generation
上启动后台任务,该任务将返回 200 并在后台运行任务以生成报告。某些数据库表中会有一个条目指示任务是否已完成或正在运行(取决于您如何实施),因此您只需查询该条目即可获得
get_csv
响应。

您可以将现有任务队列之一集成到您的 django 应用程序中:

我反对建议 django-background-tasks 和 django-q,因为这些项目没有得到维护。

© www.soinside.com 2019 - 2024. All rights reserved.