2

リモートデータベースを使用するアプリケーションを構築しています。タイプAのオブジェクトをデータベースに保存し、データベースからタイプBのオブジェクトを読み取ります。

モデルを保存するとGILがブロックされて解放される可能性があり、アプリケーションは保存されたオブジェクト自体を使用しないため、呼び出しを.save()別のスレッドに移動したいと思います。

Djangoは一般的にスレッドセーフではないことを私は知っています。だから私の質問は-他のスレッドがタイプAのオブジェクトを保存している間にタイプBのオブジェクトをクエリすることに問題はありますか?

4

2 に答える 2

2

これは実際には質問への回答ではありませんが、メッセージ キュー システムをセットアップし、別のプロセスを使用してメッセージを処理する方がよいと思います。

保存する代わりに、新しい/変更されたオブジェクトをローカル ストレージ (GAE Tasks Queues または Amazon SQS のサービスが最適ですが、どのような種類のローカル ストレージでも構いません) に置き、それらを側で処理します。

ただし、基本的には、データベース レプリケーション スキームを実装しているため (スレッドを使用しても、ローカル ストレージはメモリです)、フル機能のレプリケーションを実際に使用することを検討する必要があります。

于 2012-05-24T11:37:07.073 に答える
0

最も簡単な方法は、 ztaskを使用して別のプロセスにオフロードすることです。

from django_ztask.decorators import task

@task()
def delayed_save(obj):
    obj.save()

...

your_object.something = "something"
delayed_save.async(your_object)
于 2012-05-24T12:01:51.920 に答える