2014-05-14 5 views
1

Возможно ли иметь нескольких рабочих, работающих с Gunicorn, и получить их доступ к некоторой глобальной переменной в упорядоченном порядке, то есть без проблем с условиями гонки?Переменный доступ в пушких с несколькими работниками

+0

ben - что вы узнали? У меня такая же проблема. Я заметил, что вы не отметили это как ответ, но я подумал, как получилось – domoarrigato

+1

Прошло некоторое время, но, насколько я помню, я пришел к выводу, что обмен данными между разными работниками невозможно. Я имею в виду, в конце концов, это просто процессы, поэтому есть способы обмена данными, но это не так. Для моей проблемы можно было синхронизировать синхронизацию до уровня базы данных. – ben

+0

вот что я сделал в то время: / – domoarrigato

ответ

0

Предполагая, что глобальная переменная означает другой процесс, который хранит их в памяти или на диске, да, я так думаю. Я не проверял исходный код Gunicorn, но на основании проблемы, с которой я столкнулся с каким-то старым кодом, было то, что несколько пользователей получили тот же ключ из старой таблицы MyISAM, увеличив его и создав новую запись, используя уникальный для создания новой записи. В результате иногда (при очень интенсивном движении) создается одна запись (самая новая, перезаписывающая старые, все используют один и тот же инкрементный ключ). Эта проблема никогда не наблюдалась во время обновления аппаратного обеспечения, когда я уменьшал рабочих-пулеметчиков веб-сайта до одного, что было причиной для изучения этой вероятной причины в первую очередь.

Как правило, сокращение рабочих приведет к снижению производительности, и лучше справляться с этими проблемами с транзакциями (если вы используете ACID RDBMS, в отличие от MyISAM). Такая же проблема должна присутствовать в Redis и подобных магазинах.

Также не должно быть проблем с файлами и сокетами, поскольку, насколько мне известно, операционная система блокирует доступ других файлов (даже детей) к открытому файлу.

Смежные вопросы