Безопасен ли поток демо-приложения чата Python Tornado? - PullRequest
1 голос
/ 05 марта 2012

Я играл с Tornado chat demo .На первый взгляд кажется, что метод new_messages не является потокобезопасным - кажется, что элементы могут быть добавлены в массив waiters, пока этот же массив повторяется в цикле for.

Это демо не безопасно?Или это потокобезопасный просто потому, что объект Python set сам по себе потокобезопасен? Являются ли объекты Python set потокобезопасными?Кажется, я нахожу противоречивые мнения по этому вопросу (и слово set крайне сложно найти в Google!)

Бонусные баллы - почему для массива waiters установлено новое значение setв конце итерации вместо опустошения set?

Ответы [ 2 ]

6 голосов
/ 06 марта 2012

По умолчанию в приложениях Tornado отсутствуют потоки.Tornado - это система, основанная на событиях, поэтому существует только один путь выполнения.Что нужно знать о торнадо, так это то, в какие моменты вы возвращаете выполнение к IOLoop.

Несмотря на то, что GIL защищает от класса ошибок потоков, вы все равно можете писать приложения, которые обращаются и изменяютданные вне пути доступа к программе.

0 голосов
/ 05 марта 2012

Это потокобезопасный просто потому, что чистый Python всегда потокобезопасен. Из-за глобальной блокировки интерпретатора одновременно работает только один поток Python.

...