2017-12-12 34 views
1

実稼働環境設定のためにuWSGI + NginxでラップされたPythonフラスコAPIがあります。私は4人のNginxワーカーと、以下のように設定されたワーカー1スレッドを持っています。プロセス= 4スレッド= 1uWSGI Workersが同じJSONファイルに書き込む

API Postを発行すると、ポストはコードの異なる部分でjsonファイルを書き込み、読み取ります。

複数のAPIリクエストを並行して発行すると、期待通りにこれらの4人のNginxワーカーに配信されます。そして彼らは先に進み、要求を並行して処理します。複数のプロセスが同じファイルを読み書きしているときに、これによってjson ValueErrorsが発生することがあります。

このシナリオをどのように克服できますか?これは私のAPI内ではマルチプロセッシングではありません。だから私のjsonの更新コード内のPythonのマルチプロセッシングのロックを使用して私の問題を解決することはありません。

jsonファイルを一度に1人ずつ更新できるようにします。 uwsgiの労働者にロックを共有する方法はありますか?

+0

jsonファイルを「読み書き」すると、ディスクを意味するのでしょうか?読者が読んで書いているところで、より良い文脈を与えるために、読者が読んで(有益な場合)有益かもしれません。 – SteveJ

答えて

0

すべてのこれらの異なるプロセスは、異なるpidを持つことになりますので、なぜあなたはJSONの読み取り/書き込みのためにファイル名としてそれを使用しないでください。

import os 
pid = os.getpid() 
f = open(pid,'w+') 

不要なアドバイス:私は非常にあなたのプログラム間のデータ交換方法として /書き込みファイルの読み取りを使用しないことをお勧めします、機能/クラス間の値を渡すか、いくつかのRedisでそれを設定しようmechasimをキャッシュするような(遅い)。しかし、ファイルからの書き込みと読み取りは最も遅いです。