Coś, o czym pomyślałem:Co stanie się, gdy masz nieskończoną pętlę w kodzie widoku Django?
Załóżmy, że piszę kod widoku dla mojej witryny Django, a ja popełniam błąd i utworzę nieskończoną pętlę.
Ilekroć ktoś spróbuje uzyskać dostęp do widoku, robotnik przypisany do żądania (czy to pracownik Geventa lub wątek Python) pozostanie w pętli przez czas nieokreślony.
Jeśli dobrze rozumiem, serwer wyśle błąd czasowy do klienta po 30 sekundach. Ale co stanie się z pracownikiem Pythona? Czy będzie działać bezterminowo? To brzmi groźnie!
Wyobraź sobie, że mam serwer, na którym mam przydzielonych 10 pracowników. Pozwoliłem, aby to działało iw pewnym momencie klient próbuje uzyskać dostęp do widoku z nieskończoną pętlą. Pracownik zostanie przydzielony do niego i będzie skutecznie martwy do następnego uruchomienia serwera. Niebezpieczne jest to, że na początku tego nie zauważyłem, ponieważ strona będzie po prostu niepostrzeżenie wolniejsza, mając 9 pracowników zamiast 10. Ale może się to zdarzyć znowu i znowu przez długi czas, może miesięcy. Strona będzie stopniowo postępować wolniej, aż w końcu z jednym tylko robotnikiem będzie bardzo wolno.
Restart serwera rozwiązałby problem, ale nie chciałbym, aby funkcjonalność mojej witryny była zależna od restartu serwera.
Czy to prawdziwy problem? Czy istnieje sposób, aby tego uniknąć?
Aktualizacja: Chciałbym również bardzo doceniam sposób, aby zrobić StackTrace gwintu/pracownika, który utknął w nieskończonej pętli, więc mogę mieć, że wysłana do mnie, więc będę sobie sprawę z problemu . (Nie wiem, jak to zrobić, ponieważ nie podniesiono żadnego wyjątku).
Aktualizacja osobom mówiącym o skutkach "Unikaj pisania kodu, który ma nieskończone pętle": W przypadku, gdyby nie było oczywiste, że nie spędzam wolnego czasu celowo umieszczając nieskończone pętle w moim kodzie. Kiedy takie rzeczy się zdarzają, są błędami, a błędy można zminimalizować, ale nigdy nie można ich całkowicie uniknąć. Chcę wiedzieć, że nawet gdy popełnię błąd, będzie sieć bezpieczeństwa, która powiadomi mnie i pozwoli mi rozwiązać problem.
ciekawe lektury: http: // stackoverflow. com/questions/8685695/how-do-i-run-long-term-infinite-python-processes –
Zaktualizowałem moją odpowiedź, mam nadzieję, że teraz odpowiada na twoje pytanie :) –