почему не выделить блок с получением данных в отдельную корутину которая будет работать через очереди? тогда on_message будет просто добавлять задачки для парсинга в очередь или команды по остановке корутины. также завершение сессии будет приводить к остановке корутины.
и да, таки все клиентов по присоединении надо добавлять в set и удалять из него при отсоединении.
вот так реализован чат посмотрите как идет работа с waiters в ChatSocketHandler
переименуйте docx в zip, распакуйте архив. внутри будет куча xml файликов. выберите тот который вам надо и обычной либой lxml вытащите все что вам надо
docx это ответ от microsoft для libreoffice за то что они придумали хранить свои файлы в xml формате
ну или же используйте либу, которую посоветовал Сергей Горностаев, она вполне хорошо бегает
зачем ? если можно создать очередность вопросов и только одну функцию, которая принимает все ответы. также в скрытых параметрах айдишку сессии опроса и айди вопроса. ответ идет в виже параметра формы. после принятия ответа сервером - отправляется в форму следующий вопрос и в сессии метится активным этот вопрос.
так можно в любой момент продолжить опрос с места где закончил пользователь
Артем Советников, у меня тот же путь, тоже работаю большими обьемами данных. так что рекомендую всеже посмотреть на ассинхронные фреймворки. удобнее с ними в разы работать :)
кстати тоже могу дать кучищу примеров как на потоках-корутинах так и торнадо-асинк
но ... этот путь надо пройти каждому самостоятельно, потому как мышление для ассинхронного программирования надо иметь другое, тут я согласен полностью