Dogslow

Софтуер снимки:
Dogslow
Софтуер детайли:
Версия: 0.9.5
Дата на качване: 14 Apr 15
Розробник: Erik van Zijst
Разрешително: Безплатно
Популярност: 1

Rating: nan/5 (Total Votes: 0)

Dogslow е Django пазител мидълуер клас, която трупа tracebacks на бавни заявки.
<Силен> Монтаж:
Инсталирайте dogslow:
PIP инсталирате dogslow
След това се добавят, ако в своя списък с мидълуер класове във вашия Django settings.py файл:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware",
& Nbsp; ...
)
За най-добри резултати, го превръщат в един от първите middlewares които се движат.
<Силен> Configuration:
Можете да използвате следните конфигурационни имота във вашия settings.py файл за настройка на правозащитната организация:
# Watchdog е активирана по подразбиране, за да забраните временно, настроен на False:
DOGSLOW = True
# Местоположение където Watchdog съхранява своите регистрационни файлове:
DOGSLOW_OUTPUT = "/ TMP"
# Вход искания, като по-дълъг от 25 секунди:
DOGSLOW_TIMER = 25
# Когато и двете посочени, имейли backtraces:
DOGSLOW_EMAIL_TO = "errors@atlassian.com"
DOGSLOW_EMAIL_FROM = "no-reply@atlassian.com"
<Силен> Usage:
Всеки входяща заявка HTTP получава 25 секунда изчакване в куче-пазач. Ако искането не се връща в рамките на това време, пазител активира и отнема един поглед на комин на искане конец и пише за обратно проследяване (включително всички местни стека променливи - Django стил) в лог файл.
Всяка бавно искане е влязъл в отделен файл, който изглежда така:
Undead искане заловено на: 16-05-2011 02:10:12 UTC
GET HTTP: // Localhost: 8000 / забавяне = 2
Тема ID: 140539485042432
Process ID: 18010
Родител PID: 17762
Започната: 16-05-2011 02:10:10 UTC
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", Онлайн 107, в inner_run
& Nbsp; Run (self.addr, INT (self.port), манипулатор, IPv6 = self.use_ipv6)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", линия 696, в навечерието
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", линия 227, в serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", линия 284, в _handle_request_noblock
& Nbsp; self.process_request (молба, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", линия 310, в process_request
& Nbsp; self.finish_request (молба, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", линия 323, в finish_request
& Nbsp; self.RequestHandlerClass (молба, client_address, самостоятелно)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", линия 570, в __init__
& Nbsp; BaseHTTPRequestHandler .__ първоначален __ (самостоятелно, * аргументи, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", линия 639, в __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", линия 615, в дръжката
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", линия 283, в навечерието
& Nbsp; self.result = заявление (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", ред 68, в __call__
& Nbsp; връщане self.application (околна, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", линия 273, в __call__
& Nbsp; отговор = self.get_response (искане)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", линия 111, в GET_RESPONSE
& Nbsp; отговор = обаждане (молба, * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", линия 6, в съня
& Nbsp; time.sleep (флоат (request.GET.get ("закъснение", 1)))
Пълен обратно проследяване с локални променливи:
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", Онлайн 107, в inner_run
& Nbsp; Run (self.addr, INT (self.port), манипулатор, IPv6 = self.use_ipv6)
& Nbsp; ... товар още ...
В примера по-горе е видно, че искането конец беше блокиран в time.sleep () по време dogslow взе своя снимка.
Исканията, които връщат преди таймаут dogslow изтича не излизам.
Имайте предвид, че dogslow отнема само един поглед на комин на конеца е. Той не прекъсва по искане, или да го повлияе по никакъв друг начин. Следователно помощта dogslow е безопасно да се използва за производство.
<Силен> Уговорки
Dogslow използва многонишкова. Той има една единствена фон вденете дръжките на периодите за антимонополни и предприема tracebacks, така че оригиналът конците искане не са прекъснати. Това има някои последици.
Multithreading и GIL
В cPython, на GIL (Global Interpreter Lock) предотвратява няколко теми от изпълняващият Python код едновременно. Само когато нишка изрично освобождава заключване си на Джил, може втора нишка писта.
Освобождаване на GIL се извършва автоматично всеки път, когато дадена програма Python прави блокиране на повиквания извън преводача, например, когато се прави IO.
За dogslow това означава, че тя може само надеждно прихващат искания, които са бавни, защото те правят IO, наричайки сън или зает чака да придобие самите брави.
В повечето случаи това е добре. Важна причина за бавните заявки Django е скъп базата данни заявка. Тъй като това е IO, dogslow да заловят глоба. Това е сценарий, където GIL cPython е проблематично е, когато конец искане хитове безкраен цикъл в Python код (или законен Python, че е изключително скъпо и отнема много време, за да се изпълни), никога не е освобождаване на GIL. Макар пазител таймер dogslow е не стане изпълнима, че не мога да вляза в стека.
<силни> Кооперациите съчетания и Greenlets
Dogslow е предназначен за използване в синхронна конфигурация работник. А уеб сървър, който използва специални теми (или еднонишкови, посветени процеси работник) да служи искания. Вграден wsgi сървъра Django е прави това, тъй като прави Gunicorn в режим по подразбиране синхрон-работник.
Когато използвате с "ко-съчетания рамка", където множество заявки се обслужват едновременно от една нишка, backtraces може да се окажат безсмислени

<силни> Изисквания :.

<ул >

  • Python
  • Django
  • Друг софтуер на разработчика Erik van Zijst

    interruptingcow
    interruptingcow

    14 Apr 15

    Коментари към Dogslow

    Коментари не е намерена
    добавите коментар
    Включете на изображения!