私の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)
これは可能ですか?それとも私はこれを別の方法で行うべきですか?