在我的 django 应用程序上,我有一个可能需要一些时间才能运行的报告(一个 csv 下载)。当用户运行报告时,他们将被重定向到“处理”页面,其中 javascript 函数每秒检查服务器以查看 csv 是否已创建(文件名包含在 HttpResponse 对象中)。
我正在寻找的是一种识别创建 csv 的线程的方法。这样我就可以estimated_time_to_completion
向线程添加一个属性,并将此信息包含在保留页面中。事实上,我可以停止检查(解锁的)csv 是否存在——我可以询问线程是否完成。
我的 csv 构建线程看起来像 -
class CsvBuilder(threading.Thread):
def __init__(self, file_name, parameters)
self.file_name = file_name
self.parameters = parameters
threading.Thread.__init__(self)
def run():
# ...
file = open(self.file_name, 'wb')
writer = csv.writer(file)
for patient in patients:
writer.writerow('some data')
self.time_remaining = # a timedelta object
file.close()
然后我的 django 请求看起来像 -
def create_csv(request):
'''
Standard django view to create a csv
'''
# get filename and parameters from request
thread = CsvBuilder (file_name, parameters)
return render_to_response('processing.html', {"thread_id": thread.thread_id})
def check_progress(request):
'''
An ajax call to check the progress on a report
'''
thread_id = requst.GET['thread_id']
# find the thread
return HttpResponse(thread.time_remaining)
这可能吗?还是我应该以不同的方式解决这个问题?