2012-05-08 6 views
2

私はビューの最初の行にsleep(30)を追加しようとしました。その後、このページを2つのブラウザタブで開きました。最初のタブは30秒後にページをロードし、2番目のタブは60秒でロードしました。その間、私は別のPCからページを開くことができました。つまり、Djangoは同じクライアントからの同時リクエストをブロックするように見えます。Djangoが同じセッション内で同時にリクエストをブロックするのはなぜですか?

これは私のアプリにとって非常に良いことです。そして、私のサイトが将来このように動作することを確かめたいと思います。しかし、私はそのようなDjangoの動作を記述しているドキュメントや記事を見つけられませんでした。だから私はまだこれが機能か運勢かどうかは分かりません。どのように、なぜこれがうまくいくのか、誰かに説明してもらえますか?

私が実際に必要とするのは、ビューの処理中にセッションをブロックすることです。もちろん、私はいくつかのフラグやdbトランザクションを使用することができます。しかし、私はDjangoで既に実装されている機能を追加したくありません。

私はPython 2.6.5、django 1.4、ubuntu server、nginx、およびuwsgiを使用します。 postgresqlとsqliteの両方を試しました。

マイuwsgi設定:

<uwsgi> 
    <pythonpath>/home/admin/app/src</pythonpath> 
    <app mountpoint="/"> 
     <script>deploy.wsgi</script> 
    </app> 
    <workers>4</workers><!-- Not sure this is needed --> 
    <processes>2</processes> 
</uwsgi> 

私はまたのrunserverコマンドと同じ効果を得ました。

+1

実際に実行しているサーバはどれですか(ubuntuは、サーバ自体ではなく、実行しているオペレーティングシステムです)Apacheですか?ガンニコーン?あなたは組み込みのdjangoサーバ(つまり、python manage.py runserver)を使用していますか? –

+1

申し訳ありませんが、私はサーバーについて忘れました:)ちょうどサーバーの詳細で質問を更新しました。 – raacer

+0

いくつかのブラウザベースの開発者ツール(例:chrome dev tools:Network)を使用して、待ち時間が時間を浪費していたかどうかを確認しましたか? – Priyeshj

答えて

1

実際、Djangoは同時リクエストをブロックしません。

同じセッションで2つのブラウザ(たとえばchromeとfirefox)を実行した場合(最初のブラウザから2番目のセッションにセッションIDクッキーをコピーすることによって)、ブロッキングは発生しません。したがって、これはブラウザの機能であり、Djangoとは関係ありません。これは、コードを安全にするために、自分でいくつかのブロック機能を追加する必要があることを意味します。

関連する問題