3

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

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

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

私はpython2.6.5、django 1.4、ubuntuサーバー、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コマンドでも同じ効果が得られました。

4

1 に答える 1

2

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

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

于 2012-05-09T12:22:11.270 に答える