Что-то, о чем я только что подумал:
Скажем, я пишу код представления для своего сайта Django, но делаю ошибку и создаю бесконечный цикл.
Всякий раз, когда кто-то пытался получить доступ к представлению, рабочий процесс, назначенный запросу (будь то рабочий процесс Gevent или поток Python), оставался в цикле на неопределенный срок.
Если я правильно понимаю, сервер отправит клиенту ошибку тайм-аута через 30 секунд. Но что будет с рабочим Python? Будет ли он работать бесконечно? Звучит опасно!
Представьте, что у меня есть сервер, на котором я выделил 10 воркеров. Я позволяю ему работать, и в какой-то момент клиент пытается получить доступ к представлению с помощью бесконечного цикла. Ему будет назначен рабочий, и он будет фактически мертв до следующего перезапуска сервера. Опасность в том, что сначала я бы этого не заметил, потому что сайт просто стал бы незаметно медленнее, имея 9 воркеров вместо 10. Но потом это может повторяться снова и снова на протяжении длительного промежутка времени, может месяцев. Сайт просто становился все медленнее, пока, в конце концов, он не стал бы действительно медленным только с одним работником.
Перезапуск сервера решит проблему, но я бы не хотел, чтобы функциональность моего сайта зависела от перезапуска сервера.
Это реальная проблема, которая происходит? Есть ли способ избежать этого?
Обновление: я также был бы очень признателен за способ получить трассировку стека потока/рабочего, который застрял в бесконечном цикле, чтобы я мог получить его по электронной почте, чтобы я был в курсе проблемы. . (Я не знаю, как это сделать, потому что исключение не возникает.)
Обновление для людей, говорящих что-то вроде "Избегайте написания кода, содержащего бесконечные циклы": Если это не очевидно, я не трачу свое свободное время намеренно на включение бесконечных циклов в свой код. Когда такие вещи случаются, это ошибки, а ошибки можно свести к минимуму, но никогда полностью не избежать. Я хочу знать, что даже если я совершу ошибку, будет система безопасности, которая уведомит меня и позволит исправить проблему.