私はDjango/MySQL間のバグのように見えるものに取り組んできましたが、スレッド化されたアプリケーションなどのニュアンスについての私自身の誤解である可能性があります。
まず、私のアプリケーションに関する情報です。Djangoのモデルを使用しているPythonでプログラムされたマルチスレッドアプリケーションがあります。キューを使用してパイプラインに情報を提供するスレッドには、3つの異なるタイプがあります。スレッド1は、データベースから多数のオブジェクトをプルし、それらをキューにスローします。次のスレッド(主な主力製品)は、アイテムをキューから取り出し、HTTPリクエストをプルして、3番目のスレッドのキューにスローします。3番目のスレッドは、htmlに対していくつかの処理を実行し、いくつかのデータベース値を更新します。
これが奇妙な部分です。「レベル」というmysql列があります。最初のスレッドは、レベル= 0の行をプルします。HTTP応答を解析した後、最後のスレッドは、HTTPから解析されるすべての種類のデータとともに、データベース内の行をレベル=1で更新することになっています。フルスピードでは、スクリプトは1分間に約1,000を処理していると言っています。ただし、レベル= 1の行数は、その約1/3で増加します。ゆっくりと進むときの問題からの抜粋を次に示します。
重要なのは、「レベル1のエントリを更新する」という行です。最後の数字は、データベース内のレベル1の行数と、それに続く作業データオブジェクトの現在の「レベル」ステータスを示しています。この出力は、正しく機能している場合です。これは、次のコードブロックによって生成されます。
# update our current record to reflect having run here
current.update = datetime.now()
# this prints out the "updating level one" text with debugging information
self.send_message(304, str(Scrape.objects.filter(level=1).count()) + ":" + str(current.level))
current.level = 1
current.save()
# and after saving the information to the db, prints it out again
self.send_message(304, str(Scrape.objects.filter(level=1).count()) + ":" + str(current.level))
self.send_message(308, str(current.asin)) # send out a consuming message
ただし、しばらく実行すると、レベル= 1のオブジェクトの数が増えないことを除いて、基本的に同じ出力が得られます。これは私にはまったく意味がありません。以前は値が=0で、現在は= 1の場合、レベル=1エントリの数が増えるはずです。
これが単なるキャッシュではないと思いますが、おそらく、私が作成したエラーか、使用しているコンポーネントからの予期しない動作のいずれかです。より経験豊富な目からのアドバイスをいただければ幸いです。