私は現在、pythonフラスコを使ってデータ処理Webサーバ(linux)を開発中です。Pythonフラスコ同時に複数のファイルへのアクセスを避ける方法(ファイルの相互排除)
一般的な作業の流れは次のとおり
- は、ユーザからの入力ファイルを取得
- フラスコ
- Javaプログラム処理この入力ファイルをJavaプログラムにこの入力ファイルを渡す(Pythonのフラスコで扱います)出力(複数のファイル)をサーバーに保存します。
- Flaskは別のpythonスクリプトを呼び出します。このスクリプトはこれらの出力を処理して最終結果を取得し、その結果をクライアントに返します。
問題は次のとおりです。ステップ3とステップ4の間に中間ファイルがいくつか存在しますが、これはローカルプログラムの場合はまったく問題にはなりません。サーバープログラムとして、複数のクライアントがこのプログラムにアクセスすると、同時にWebプログラムを使用している別のユーザーが入力した予期しない結果が得られます。
これは私が見ているところでは、これはファイルへのアクセスでの相互排除の問題のようなものです。以前はスレッド間の相互排他問題に問題がありましたが、Javaでの同期やピュータンでのロックなどのスレッドロックを使用してそれらのいくつかを解決しましたが、スレッドの代わりにファイルをどうするかはわかりません。
多分私は、異なるクライアントに基づいてファイルの異なるコピーを生成することができました。しかし、私が理解しているように、HTTPはステートレスなので、誰がサーバにアクセスしているのかは分かりません。私はこの目的を達成するためにログインシステムとユーザデータベースを追加したくないので、私はこの問題を解決するためのもっと簡単で良い方法があると感じています。
私は最近、良い解決策を探していましたが、理想的なものを見つけることができませんでしたので、ここでいくつかのアドバイスを探しています。どんな提案も高く評価されます。実行可能なソリューションを提案できる場合は、私にあなたの名前を教えてください。公開されると、このツールに関するデジタルおよびペーパーの出版物の感謝リストにあなたを追加できます。
私はあなたにこのhttps://docs.python.org/3/library/fcntl.html#fcntl.lockf
これは、この問題を解決するために非常に多くの方法がある私はそれを解決する方法をであり、それは当然の議論それまでですのようなものを示唆している人のシステムの種類として
解決策の1つは、一時ファイルのランダムな名前(UUIDと考える)を生成し、実行中のプログラム間でそれらの名前を渡すことです。あるいは無作為に指定されたディレクトリです。もう1つは、ファイルの終了後にファイルを削除し、チェックがある場合です。ファイルが存在する場合は、ファイルが存在するかどうかを確認します。 – Kendas
このアイデアをありがとう、私は実際にこの方法を実装することを決めたので、同時に複数のユーザーがプログラムにアクセスすることができます – Coco