2017-12-07 17 views
1

私は特定のビューが呼び出されたときに、CSVファイルへのデータの行を書きます私のDjangoアプリケーションにいくつかの機能を追加することを計画しています:CeleryはDjangoの非同期ファイル書き込み機能に必要ですか?

session_dict = collectUserDataFromRequest(request) #....collect parameters from request 

    if os.path.isfile(filename): 

     with open(filename, 'a') as csv_file: 
      a = csv.DictWriter(csv_file,session_dict.keys()) 
      a.writerow(session_dict) 
      csv_file.close() 

    else: 

     with open(filename, 'w') as csv_file: 
      w = csv.DictWriter(csv_file,session_dict.keys()) 
      w.writeheader() 
      w.writerow(session_dict) 
      csv_file.close() 

    # then proceed to render the html 

私が直面しています問題は、とき潜在的な競合条件を扱っています複数のユーザーが同時に私のアプリケーションにアクセスしています。データは任意の順序でcsvファイルに追加できますが、csvファイルでロックが解除されるのを待っている間に、ビューをロードするのに時間がかかることを望んでいません。したがって、私は文字列データの非同期のキューは、良い回避策のようにバックグラウンドで実行できるファイルに書き込まれると思う。

私はCeleryが私のDjangoアプリケーションに非同期プロセスを追加するための良いフレームワークだと言われています。しかし、いくつかのチュートリアルを見て、私はRedisのような追加のフレームワークが通常必要であることを見ています。私は、これが私が達成しようとしているものには過剰なものかもしれないと心配しています。 hereなどの標準的なマルチプロセッシング手法を使用することで逃げるか、Django実稼働環境でマルチスレッドを使用することには他の欠点がありますか?

答えて

1

最初の点:同じファイルへの書き込みを同時に要求してはいけません。ユースケースに応じて、同時アクセスを処理する方法やユーザーごとのファイルを持つ方法を知っている適切なリレーショナルデータベースにデータを格納する必要があります。

第2のポイント:いいえ、非同期操作のセロリは必ずしも必要ではありません。quite a few other solutionsがあります。

関連する問題