Używam Gunicorn do obsługi aplikacji Django, działało to w porządku, dopóki nie zmieniłem limitu czasu z 30 na 900000, musiałem to zrobić, ponieważ miałem przypadek, w którym trzeba było załadować ogromny plik i przetwarzane (proces zabiera więcej niż 30 mw niektórych przypadkach), ale po tej zmianie Gunicorn przestaje reagować po kilku godzinach, myślę, że problem polega na tym, że wszyscy pracownicy (mający 30) będą zajęci niektórymi prośbami po tym czasie, ta dziwna rzecz jest zdarza się to, nawet jeśli nie uruchomię tak długiego żądania i dzieje się to przy normalnym eksplorowaniu w administratorze django. Chcę wiedzieć, czy istnieje sposób, aby monitorować wnioski dotyczące gunicorn i zobaczyć, jak pracownicy są zajęci, jakie wnioski, chcę dowiedzieć się, że wnioski są dla nich zajęte. Próbowałem --log-file=- --log-level=debug
, ale nie mówi nic o żądaniach, potrzebuję bardziej szczegółowych dzienników.Gunicorn nie odpowiada
Odpowiedz
Podczas gdy ja również szukam dobrej odpowiedzi, aby zobaczyć, jak wielu pracowników jest zajęty, rozwiązujesz ten problem w niewłaściwy sposób. W przypadku zadania, które trwa tak długo, potrzebny jest pracownik, na przykład Seler/RabbitMQ, do asynchronicznego wykonywania ciężkiego podnoszenia, a cykl żądania/odpowiedzi pozostaje szybki.
Mam skrypt na moim miejscu, które może potrwać 5+ minut, aby zakończyć, a tu jest dobry wzór używam:
- Gdy żądanie pierwszy przychodzi, tarło zadanie i po prostu zwróci HTTP 202 Zaakceptowany. Jego celem jest "Wniosek został zaakceptowany do przetwarzania, ale przetwarzanie nie zostało zakończone."
- Wypełnij ankietę z tego samego punktu końcowego (co 30 sekund powinno wystarczyć). Dopóki zadanie nie jest kompletne, zwróć 202
- Ostatecznie po zakończeniu zwraca 200, wraz z dowolnymi danymi, których może wymagać front-end.
Dla mojej witryny chcemy zaktualizować dane, które mają więcej niż 10 minut. Przekazuję nagłówek Accept-Datetime, aby wskazać, ile starych danych jest akceptowanych. Jeśli nasza lokalna kopia w pamięci podręcznej jest starsza, odradzamy cykl zadań.
Nie, to nie zawsze jest dobre rozwiązanie, "zwykle" to prawda, ale nie zawsze. Czasami logika polega na tym, aby użytkownik poczekał, aż odpowiedź będzie gotowa (jakkolwiek to potrwa) i pokaże mu odpowiedź.W moim przypadku musiałem to zrobić i dlatego spytałem go tutaj (w każdym razie nie jestem tym, który przegłosował twoją odpowiedź) – Sassan
OK, jasne. To, co zaproponowałem, jest zazwyczaj tylko odpowiedzią. Ale w jaki sposób "sprawić, by użytkownik czekał"? Co się stanie, jeśli odświeżą się? Czy praca jest kontynuowana, czy musi zacząć od nowa. Jeśli to się powtórzy, w jaki sposób otrzymają aktualizację statusu? – user3681414
Właśnie założyłem konto z Datadogiem. Mają integrację z gunicorn, która pozwoli ci zobaczyć, ilu pracowników jest zajęty w porównaniu do wolnych. – user3681414
- 1. Heroku + nie gunicorn pracy (bash: gunicorn: nie znaleziono polecenia)
- 2. gunicorn nie obsługuje plików statycznych
- 3. ListView OnItemClickListener nie odpowiada?
- 4. Sklonowany Select2 nie odpowiada
- 5. Przycisk anulowania UISearchBar nie odpowiada
- 6. Grawitacja pionowego wyrównania nie odpowiada
- 7. nodejs: na zawsze nie odpowiada
- 8. Python OpenCv. WaitKey nie odpowiada?
- 9. Visual Studio 2015 nie odpowiada
- 10. gunicorn nie przetwarza jednoczesnych żądań jednocześnie
- 11. Plik startowy Gunicorn nie uruchamia się
- 12. Log4Net nie rejestruje ani nie odpowiada błędowi
- 13. Udostępnianie pamięci w Gunicorn?
- 14. Jak zatrzymać gunicorn poprawnie
- 15. Django Gunicorn Debugowanie
- 16. Limit czasu pracownika Gunicorn
- 17. Błąd składni instalacji gunicorn
- 18. Scala generics: Int nie odpowiada porównywalnemu?
- 19. Arkusz dokumentu nie odpowiada na zdarzenia klawiatury
- 20. Resharper: Przestrzeń nazw nie odpowiada lokalizacji pliku
- 21. Delphi XE2 aplikacja nie odpowiada na IPAD
- 22. setOnItemClickListener nie odpowiada dla Custom ListView
- 23. Dlaczego mój Eclipse nadal nie odpowiada?
- 24. Dlaczego funkcja urllib.urlopen.read() nie odpowiada kodem źródłowym?
- 25. Adb nie odpowiada z Androidem na Ubuntu
- 26. Fundament Zurb: układ nie odpowiada na iPhone'a
- 27. Serwer SVN nie odpowiada na żądania zapisu
- 28. bingst nie odpowiada na wykresie aspektu fasetowania
- 29. Witryna nie odpowiada na Samsung Galaxy S2
- 30. Przycisk Android nie odpowiada po animacji
Moje przeczucie polega na tym, że może występować zakleszczenie w niektórych kodach obsługi żądań. Po 30-sekundowym limicie czasu dotknięci pracownicy ostatecznie się zwolnią. Przy przekroczeniu czasu 0,9 megasekundy skutecznie tego nie zrobią. –
Rozumiem, dlatego potrzebuję dzienników, aby dowiedzieć się, co się dzieje. – Sassan