Первое что бросилось в глаза - это код
request = Request()
Я не знаю как работает wsgiref.simple_server, который используется в примерах по умолчанию, но для Apache + mod_wsgi такой код выполнится всего 1 раз при первом запуске приложения.
Нахожу класс Request. Ага он наследуется от threading.local, значит request - это по сути объект-хранилище локальное для каждого потока. Тоесть код request = Request() будет выполнятся для каждого потока.
Но это не устраняет проблему! Поток, после обработки запроса не убивается Apache-м, а используется снова. В настройках Apache даже есть директива MaxRequestsPerChild, которая указывает сколько запросов может обработать поток, прежде чем его прибьют.
Имеем ситуацию: на сайт зашел Вася, поток обработал запрос, в request записались данные Васи. На сайт заходит Петя, запрос на обработку передается тому самому потоку, но в request уже есть данные Васи и они не будут перезаписаны (пока Apache не убьет поток/процесс или не перезагрузится).
Страшный баг в архитектуре или я чего-то не понимаю?