2017-05-16 4 views
1

をやっていない私は、私はすべてのモデルについてジャンゴ - 同時実行ジャンゴ同時実行性は何も

を使用しています同時実行 ために私のアプリをテストしていので、私は2つのブラウザウィンドウ私のアプリで開く

from concurrency.fields import IntegerVersionField 

version = IntegerVersionField() 

を追加しました。 2人の異なるユーザーでログを作成し、同じレコードで編集します。 1つを保存して2番目のものを保存し、常に2番目のものを上書きします。基本的には何もしません。 は保存私の第二のエラーを取得するために期待されます。

何が問題になりますか?

答えて

2

私は、Djangoの同時実行を使用したことがないと私は同時実行の一般的な概念に基づいて抽象的同時性、トランザクション管理などに提供するアプリケーション間で実行する場合、私はマイルを実行します。この動作は正しいようです。ここにエラーはありません。

django-concurrencyは Djangoのオプティミスティックロック[1]実装です。

サポートされているDjangoのバージョン:は1.8.x、1.9.x、1.10.x.、1.11.x

それはUI からとDjangoのコマンドからDjangoの両方で同時編集をやってからユーザーを防ぐことができます。

実際には、2人のユーザーが同じインスタンスを同時に変更できないということです。ちょうど試してみたのソートのアドホック2つのブラウザのテストでは、このような状況が発生することはできません!どのような通常起こることは1つであるか、ローカルホスト上で小規模なデータベース上でテストするとき、そこには、待ち時間がなく、すべてが瞬時に行われるため、他のトランザクションは、通常、完了するまで実行されます。

これをテストするための適切な方法は、個別の変更シェルを開くことで、Djangoの並行処理ガイドに概説されるように同じインスタンスと編集を開きます。または、マルチスレッドクライアントでテストしてください。

+0

保存したときに新しいバージョンのIDが作成されると思っていましたが、もう一度保存するとバージョンIDが現在とは異なるバージョンであることがチェックされ、2回目の保存時にエラーが発生します... 同じ瞬間の状況を解決するだけではそれはそれほど有用ではありません。 –

+0

はい、それはブラックボックスではなく、手動でトランザクションを処理するために、おそらく良いでしょう – e4c5

関連する問題