2017-04-06 9 views
0

ためasyncroniously動作するようですブラウザコンソールのJSの部分:Djangoは、私はビューを持っているいくつかの理由

for (i=1;i<100;i++) { 
    $.get('/buy/', function(data) {console.log(data)}); 
} 

結果では、私は1件の同じ関連商品(1〜5)販売オブジェクトのランダム量を持つユーザーを持っています。 user.sale_set.count()印刷物3が、そこ

前に何もなかったが、製品はすでに、おそらくDjangoが何らかの理由で非同期に動作すると思われ、ユーザだから、.filter(user__isnull=True)

を、持っていた場合には、販売が作成されていないはずはないはずなので、または私はただのばか?

これは私にとって非常に奇妙で新しい動作ですが、おそらく私のgunicorn systemdのセットアップが助けになるでしょうか?

[Unit] 
Description=my_project daemon 
After=network.target 

[Service] 
User=root 
Group=nginx 
WorkingDirectory=/www/my_project 
;ExecStart=/env/my_project/bin/gunicorn --workers 3 --bind unix:/www/my_project/myproject.sock core.wsgi:application 
ExecStart=/env/my_project/bin/gunicorn core.wsgi --timeout 10000 --workers=25 -b 0.0.0.0:8000 

[Install] 
WantedBy=multi-user.target 
+1

注意を使用して、この動作を修正することができます競合状態のため、それは起こります。 Djangoは同期型ですが、複数のスレッドとプロセスを使用することで、同時リクエストを処理できます。 – knbk

答えて

1

あなたは_request_はJavascriptによって非同期送信であることをselect_for_update

from django.db import transaction 

with transaction.atomic(): 
    product = Product.objects.select_for_update().filter(user__isnull=True).first() 
    if product: 
     product.user = request.user 
     product.save() 
+0

男、あなたは最高です!私は決して推測していないだろう) 'select_for_update'はメソッド呼び出し' select_for_update() 'でなければなりません。もう一度、あなたは英雄です。 А、сорян、выизБелорусии)Пасибогромное、приветизМосквы) – MaxCore

関連する問題