django runserver, пропустить / кэшировать? запросы, когда несколько выполняются одновременно - PullRequest
1 голос
/ 07 октября 2019

При запуске django-admin runserver и одновременном выполнении нескольких запросов PATCH я вижу журналы для всех, но при отладке выполняется только один.

Проблема исчезла при использовании django-admin runserver --nothreading .

Я использую отладчик Pycharm, возможно, потому что runserver по умолчанию использует многопоточность , поэтому, когда 2запросы приходят одновременно с созданием второго потока, который Pycharm не видит и не отлаживает. Поэтому я не могу отладить его, но вижу журналы.

Но во-вторых, с обновлением PATCH успешен только один запрос, я знаю, что django-admin runserver не предназначен для производства, но есть ли состояние гонки данных ? Я пытался использовать django.db.transaction.atomic , но он ничего не изменил?

Мой первоначальный вывод заключается в том, что runserver не сохраняет потоки, если мы рассматриваем базу данныхобновлений, поэтому при тестировании нескольких запросов на обновление следует использовать флаг - nothreading.

Буду признателен за любую помощь / объяснение здесь.

Best, Игорь

PSУ меня нет кода, так как я думаю, что он здесь никак не поможет:

1 Ответ

1 голос
/ 07 октября 2019

transaction.atomic() гарантирует, что либо все запросы в блоке зафиксированы в базе данных, либо ни один не выполняет. Это не останавливает разные потоки / процессы, изменяющие одни и те же строки одновременно. Чтобы сделать это, вы должны посмотреть на блокировку или select_for_update.

Когда вы развертываете Django, используя что-то вроде gunicorn или mod_wsgi, обычно будет несколько рабочих / потоков. Поэтому, если вы используете --nothreading в разработке, вы скрываете проблемы, которые могут возникнуть в работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...