我正在使用django和openpyxl按钮点击导出报告。但是,我的一个报告非常大(大约3.5MB和150k行数据,包含30多列),当我尝试运行openpyxl文件生成时,我得到了
504 Gateway Time-out
The server didn't respond in time.
无论如何我可以阻止django视图超时吗?也许我可以在视图中添加到python以允许额外的处理时间?如果需要一两分钟并不重要。
我尝试过openpyxl只写模式,但它仍然超时。我认为值得注意的是我正在使用apache
这是我的代码:
wb = Workbook(write_only=True)
ws = wb.create_sheet()
# Adds headers
ws.append(data['headers'][1:])
# Add data to 'RawData'
for row in data['data']:
ws.append(row[1:])
file_name = str(report_name).replace(' ', '_') + "_export.xlsx"
response = HttpResponse(save_virtual_workbook(wb), content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename= "{0}"'.format(file_name)
return response
答案 0 :(得分:1)
您需要在 httpd.conf 中增加 Apache 的timeout
。使用this获取更多信息。
答案 1 :(得分:1)
从Django官方文件中我找到了Streaming Of Large Files,这是适合你的答案,
在处理生成非常大的响应的视图时,您可能会这样做 我想考虑使用Django的StreamingHttpResponse。对于 例如,通过流式传输需要很长时间来生成您的文件 可以避免负载均衡器丢弃可能具有的连接 否则在服务器生成响应时超时。
在该示例中,他们使用csv
,但我认为您可以将content_type="text/csv"
更改为其他格式以使其适合您