Что-то, о чем я подумал:Что происходит, когда у вас есть бесконечный цикл в коде просмотра Django?
Скажем, я пишу код для моего сайта Django, и я делаю ошибку и создаю бесконечный цикл.
Всякий раз, когда кто-то пытается получить доступ к представлению, работник, назначенный на запрос (будь то рабочий Gevent или поток Python), будет оставаться в цикле на неопределенный срок.
Если я правильно понял, сервер отправил бы ошибку таймаута клиенту через 30 секунд. Но что будет с работником Python? Будет ли он продолжать работать бесконечно? Это звучит опасно!
Предположим, у меня есть сервер, на котором я выделил 10 рабочих. Я разрешаю ему работать, и в какой-то момент клиент пытается получить доступ к представлению с помощью бесконечного цикла. Работник будет назначен ему и будет эффективно мертв до следующего перезапуска сервера. Опасно то, что сначала я этого не заметил бы, потому что сайт был бы незаметно медленнее, имея 9 рабочих вместо 10. Но тогда это может случиться снова и снова в течение длительного промежутка времени, может быть, месяцев. Сайт будет постепенно прогрессировать медленнее, пока, в конце концов, это будет очень медленно с одним работником.
Рестарт сервера решает проблему, но я бы не хотел, чтобы функциональность моего сайта зависела от перезагрузки сервера.
Действительно ли это настоящая проблема? Есть ли способ избежать этого?
Update: Я также очень ценю способ взять StackTrace нити/работника, который застрял в бесконечном цикле, так что я мог бы, что по электронной почте мне, так что я буду в курсе проблем , (Я не знаю, как это сделать, потому что не возникает никаких исключений.)
Обновление людям, говорящим о действиях «Избегайте написания кода с бесконечными циклами»: в случае, если это не было Очевидно, я не трачу свое свободное время, намеренно помещая бесконечные петли в свой код. Когда это происходит, они являются ошибками, и ошибки могут быть сведены к минимуму, но никогда полностью не устранены. Я хочу знать, что даже когда я ошибаюсь, там будет защитная сетка, которая уведомит меня и позволит мне решить проблему.
интересно читать: HTTP: // StackOverflow. com/questions/8685695/how-do-i-run-long-term-infin-python-процессы –
Я обновил свой ответ, надеюсь, теперь он ответит на ваш вопрос :) –