Im Daemon-Modus gibt es kein Konzept für einen anmutigen Neustart, wenn die WSGI-Skriptdatei berührt wird, um einen Download zu erzwingen. Das heißt, im Gegensatz zu Apache selbst, das neue Apache-Server-Child-Prozesse startet, während alte Prozesse auf aktuelle Anfragen warten, muss der bestehende Prozess beendet werden, bevor ein neuer Prozess gestartet wird, für mod_wsgi-Daemon-Prozesse.
Die Folgen davon sind, dass mod_wsgi nicht unbegrenzt auf die aktuellen Anforderungen warten kann. Wenn dies der Fall ist, besteht die Gefahr, dass, wenn alle Daemon-Prozesse gebunden sind und darauf warten, dass aktuelle Anforderungen beendet werden, diese Clients eine merkliche Verzögerung bei der Verarbeitung erfahren.
Am anderen Ende der Skala kann der Daemon-Prozess jedoch nicht sofort beendet werden, da dies dazu führen würde, dass aktuelle Anforderungen unterbrochen werden.
Es gibt also einen Mittelweg. Der Daemon-Prozess wartet darauf, dass Anforderungen vor dem Beenden abgeschlossen werden. Wenn sie jedoch nicht innerhalb des Zeitraums des Herunterfahrens abgeschlossen wurden, wird der Daemon-Prozess zwangsweise beendet und die aktiven Anforderungen werden unterbrochen.
Der Zeitraum dieses Zeitlimits für das Herunterfahren beträgt standardmäßig 5 Sekunden. Sie kann mit der Option "shutdown-timeout" für die WSGIDaemonProcess-Direktive außer Kraft gesetzt werden. Die Auswirkungen einer Änderung sollten jedoch berücksichtigt werden.
In diesem speziellen Fall besteht das Risiko, dass aktive lange Anforderungen unterbrochen werden, wenn Sie lange laufende Anforderungen noch aktiv haben, wenn die erste Anforderung nach dem Berühren der WSGI-Skriptdatei eingeht.
Die nächste bemerkenswerte Sache, die Sie sehen können, ist, dass selbst wenn es keine lange laufenden Anforderungen und Prozesse sofort herunterfahren, dann ist es immer noch notwendig, die WSGI-Anwendung innerhalb des neuen Prozesses wieder zu laden. Die dafür benötigte Zeit wird als Verzögerung bei der Bearbeitung der Anfrage angesehen. Wie groß diese Verzögerung ist, hängt vom Framework und Ihrer Anwendung ab. Der schlimmste Übeltäter, was die Anlaufzeit angeht, von denen ich weiß, ist TurboGears. Django ist etwas besser und die besten bis hin zu schnellen Start-up-Zeiten sind leichte Mikro-Frameworks wie Flask.
Beachten Sie, dass alle neuen Anforderungen, die auftreten, während diese Herunterfahren und Startverzögerungen auftreten, nicht verloren gehen sollten. Dies liegt daran, dass der HTTP-Listener-Socket eine bestimmte Tiefe aufweist und Verbindungen in der Warteschleife stehen, die darauf warten, akzeptiert zu werden. Wenn jedoch die Anzahl der eingehenden Anfragen sehr groß ist und die Warteschlange voll ist, werden im Browser Fehler angezeigt, die die Verbindung ablehnen.
Diese zusätzlichen Hintergrundinformationen sind großartig. Ich hatte nur an neue Anfragen gedacht, nicht an langwierige Voranfragen, aber was Sie beschreiben, macht durchaus Sinn. Vielen Dank. – AndrewF
FWIW, mod_wsgi 4.0 wird mit einigen etwas eleganteren Neuladeoptionen beginnen, sobald diese verfügbar sind. –