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

k4ymrczo  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(89)

我有一个使用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")
qfe3c7zg

qfe3c7zg1#

您应该在start_report_generation上启动一个后台任务,它将返回200,并在后台运行一个任务以生成一个报告。在某个数据库表中会有一个条目指示任务是否完成或正在运行(取决于您如何实现),因此您可以查询get_csv响应。
您可以将现有的任务队列之一集成到您的django应用程序中:

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

相关问题