So analysieren Sie den Gunicorn Arbiter-Quellcode
Wie bereits erwähnt, ist Arbiter der Kern des Gunicorn-Master-Prozesses. Arbiter ist hauptsächlich für die Verwaltung von Worker-Prozessen verantwortlich, einschließlich des Startens, Überwachens und Beendens von Worker-Prozessen. Gleichzeitig kann Arbiter auch App-Anwendungen im laufenden Betrieb aktualisieren (neu laden) oder Gunicorn online aktualisieren, wenn bestimmte Signale auftreten. Der Kerncode von Arbiter befindet sich in einer Datei und die Codemenge ist nicht groß. Der Quellcode ist hier: https://github.com/benoitc/gunicorn.
Arbiter verfügt hauptsächlich über die folgenden Methoden:
setup:
Das Wichtigste ist, Konfigurationselemente zu verarbeiten Anzahl der Arbeiter und Arbeiter-Arbeitsmodell handle_xxx#🎜🎜 #:
Spezifische Verarbeitungsfunktionen für jedes Signal
kill_worker, kill_workers:
Signale senden zum Worker-Prozess# 🎜🎜#spawn_worker, spawn_workers
: Einen neuen Worker-Prozess forkenmurder_workers # ?? # Worker basierend auf der Konfigurationsdatei. Die Anzahl sowie die Anzahl der aktuell aktiven Worker bestimmen, ob der Worker-Prozess geforkt oder beendet wird #
Empfangenes Signal SIGUSR2-Aufruf, Online-Upgrade von GunicornNeuladen:
Nach dem Empfang des Signals SIGHUP-Aufruf wird der Worker-Prozess ausgeführt Der Prozess wird basierend auf der neuen Konfiguration gestartet und der vorherige Worker wird beendet die ausgewählte Zeitüberschreitung zum Schlafen und kann geweckt werden run: Hauptschleife
Die einzigen Funktionen von Arbiter, die tatsächlich von anderen Codes (Anwendung) aufgerufen werden, sind __init__ und Laufmethoden. In einer Codezeile:
Arbiter(self).run()
Das Selbst im obigen Code ist das Anwendungsinstanz, in der __init__ Setup aufruft, um die Konfigurationselemente festzulegen. Das Folgende ist der Pseudocode der Ausführungsmethode
def run() self.init_signal() self.LISTENERS = create_sockets(self.cfg, self.log) self.manage_workers() while True: if no signal in SIG_QUEUE self.sleep() else: handle_signal()
Über Fork Child Prozess#🎜🎜 #
Der Code für den untergeordneten Fork-Prozess befindet sich in spawn_worker. Der Quellcode lautet wie folgt:Arbiter.spawn_worker Hauptprozess:
(1) worker_class laden und instanziieren (Standard ist das synchrone Modell SyncWorker)
(2) Der übergeordnete Prozess (Masterprozess) kehrt nach der Verzweigung zurück , und die gesamte nachfolgende Logik wird im untergeordneten Prozess ausgeführt # (4) Nachdem die Schleife beendet ist, rufen Sie sys.exit(0) auf # Das Folgende ist ein Teil des Codes, den ich selbst geschrieben habe. Der Haupt-Fork-Prozess ist vereinfacht 🎜#Ausgabe in der Testumgebung:
# 🎜🎜# Fork-Unterprozess 9601 Fork-Unterprozess 9602Unterprozess wird beendet 9601 9600
Unterprozess wird beendet 9602 9600#🎜🎜 #Hauptprozess wird beendet 9600
Es ist zu beachten, dass Zeile 20
sys.exit aufruftum das Ende des untergeordneten Prozesses sicherzustellen, andernfalls wird die Hauptfunktion fortgesetzt. Die for-Schleife und die nachfolgende Logik. Kommentieren Sie Zeile 19 aus und führen Sie sie erneut aus. Anhand der Ausgabe werden Sie es verstehen.Über das Beenden des Unterprozesses
Es ist sehr einfach, den Arbeitsprozess zu beenden. Er sendet ein Signal direkt Der Quellcode lautet wie folgt:
1 # prefork.py 2 import sys 3 import socket 4 import select 5 import os 6 import time 7 8 def do_sub_process(): 9 pid = os.fork()10 if pid < 0:11 print 'fork error'12 sys.exit(-1)13 elif pid > 0:14 print 'fork sub process %d' % pid15 return16 17 # must be child process18 time.sleep(1)19 print 'sub process will exit', os.getpid(), os.getppid()20 sys.exit(0)21 22 def main():23 sub_num = 224 for i in range(sub_num):25 do_sub_process()26 time.sleep(10)27 print 'main process will exit', os.getpid()28 29 if __name__ == '__main__':30 main()
Über Schlaf und Aufwachen#🎜🎜 # us Werfen wir einen Blick auf Arbiters Schlaf und Aufwachen. Der Arbiter wird „schlafen“, wenn kein Signal zur Verarbeitung vorhanden ist. Natürlich ruft er time.sleep nicht auf, da das Signal sonst nicht sofort verarbeitet wird, wenn es eintrifft. Die Implementierung ist hier cleverer und verwendet Pipes und Select Timeout. Schauen Sie sich einfach den Code an und Sie werden es wissen
1 def kill_worker(self, pid, sig): 2 """\ 3 Kill a worker 4 5 :attr pid: int, worker pid 6 :attr sig: `signal.SIG*` value 7 """ 8 try: 9 os.kill(pid, sig)10 except OSError as e:11 if e.errno == errno.ESRCH:12 try:13 worker = self.WORKERS.pop(pid)14 worker.tmp.close()15 self.cfg.worker_exit(self, worker)16 return17 except (KeyError, OSError):18 return19 raise
os.
pipe
() #🎜 🎜#Erstellen Sie ein Paar Dateideskriptoren (r,w)
, die jeweils zum Lesen und Schreiben verwendet werden können.
LAUFZEIT: Ordentliches Herunterfahren. Wartet darauf, dass der Worker seine aktuelle Anforderung abschließt, bis eine Zeitüberschreitung auftritt.
HUP: Konfiguration neu laden, neue Arbeitsprozesse mit neuer Konfiguration starten und alte Arbeitsprozesse ordnungsgemäß herunterfahren. Gunicorn lädt die neue Version auch, wenn die Anwendung nicht vorinstalliert ist (mit der Option --preload).
TTIN: Erhöhen Sie die Anzahl der Prozesse um eins.
TTOU: Verringern Sie die Anzahl der Prozesse um eins.
USR1: Öffnen Sie die Protokolldatei erneut.
USR2: Aktualisieren Sie Gunicorn im Handumdrehen. Um den alten Prozess zu beenden, sollte ein separates Laufzeitsignal verwendet werden. Dieses Signal kann auch verwendet werden, um vorinstallierte neue Versionen der Anwendung zu verwenden.
Winch: Arbeitsprozesse ordnungsgemäß herunterfahren, wenn Gunicorn dämonisiert wird.
Das obige ist der detaillierte Inhalt vonSo analysieren Sie den Gunicorn Arbiter-Quellcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Was ist die Python-GIL, wie funktioniert sie und wie wirkt sie sich auf Gunicorn aus? Welchen Gunicorn-Arbeitertyp sollte ich für die Produktion wählen? Python verfügt über eine globale Sperre (GIL), die nur die Ausführung eines Threads (d. h. die Interpretation des Bytecodes) ermöglicht. Meiner Meinung nach ist es wichtig zu verstehen, wie Python mit Parallelität umgeht, wenn Sie Ihre Python-Dienste optimieren möchten. Python und Gunicorn bieten Ihnen unterschiedliche Möglichkeiten, mit Parallelität umzugehen, und da es kein Allheilmittel gibt, das alle Anwendungsfälle abdeckt, ist es eine gute Idee, die Optionen, Kompromisse und Vorteile jeder Option zu verstehen. Gunicorn-ArbeitertypGunico

Flask-Anwendungsbereitstellung: Vergleich von Gunicorn und suWSGI Einführung: Flask ist als leichtes Python-Web-Framework bei vielen Entwicklern beliebt. Bei der Bereitstellung einer Flask-Anwendung in einer Produktionsumgebung ist die Auswahl der geeigneten Server Gateway Interface (SGI) eine entscheidende Entscheidung. Gunicorn und uWSGI sind zwei gängige SGI-Server. In diesem Artikel werden sie ausführlich beschrieben.

Grundlegende Konzepte und Funktionen von Gunicorn Gunicorn ist ein Tool zum Ausführen von WSGI-Servern in Python-Webanwendungen. WSGI (Web Server Gateway Interface) ist eine von der Python-Sprache definierte Spezifikation und wird zur Definition der Kommunikationsschnittstelle zwischen Webservern und Webanwendungen verwendet. Gunicorn ermöglicht die Bereitstellung und Ausführung von Python-Webanwendungen in Produktionsumgebungen durch Implementierung der WSGI-Spezifikation. Die Funktion von Gunicorn ist es

Wie stellt man die Flask-Anwendung mit Gunicorn bereit? Flask ist ein leichtes Python-Web-Framework, das häufig zur Entwicklung verschiedener Arten von Webanwendungen verwendet wird. Gunicorn (GreenUnicorn) ist ein Python-basierter HTTP-Server, der zum Ausführen von WSGI-Anwendungen (WebServerGatewayInterface) verwendet wird. In diesem Artikel wird erläutert, wie Sie mit Gunicorn Flask-Anwendungen bereitstellen

Gunicorn ist eine in Python geschriebene WSGI-Webserver-Gateway-Schnittstellenspezifikation. Es handelt sich um einen leichten und effizienten Server, der speziell für die Ausführung von Python-Webanwendungen entwickelt wurde. Zu seinen Hauptmerkmalen und Funktionen gehören: 1. Hohe Leistung, die problemlos viele gleichzeitige Anforderungen verarbeiten kann; 2. Stabilität und Zuverlässigkeit, die einen dauerhaften Langzeitbetrieb ermöglichen und die Möglichkeit eines Serverabsturzes erheblich reduzieren; tun Um die Stabilität des Dienstes aufrechtzuerhalten; 4. Mehrere Bereitstellungsmethoden usw.

Gunicorn und Flask: Die perfekte Bereitstellungskombination, die spezifische Codebeispiele erfordert. Übersicht: Für Entwickler ist es sehr wichtig, die geeignete Bereitstellungsmethode zu wählen, insbesondere für Python-Webanwendungen. Unter den Python-Webframeworks ist Flask eine sehr beliebte Wahl und Gunicorn ist ein Server für die Bereitstellung von Python-Anwendungen. In diesem Artikel wird die Kombination von Gunicorn und Flask vorgestellt und einige spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen

LINUX ist ein leistungsstarkes Betriebssystem, das häufig in Servern und Entwicklungsumgebungen verwendet wird. CentOS ist ein Open-Source-Betriebssystem, das auf Red Hat Enterprise Linux (RHEL) basiert und häufig in Serverumgebungen verwendet wird. Die Installation von Gunicorn und die Partitionierung unter CentOS können die Leistung verbessern Um die Leistung und Sicherheit des Servers zu verbessern, erfahren Sie in diesem Artikel, wie Sie Gunicorn unter CentOS installieren und partitionieren. Gunicorn unter CentOS installieren Gunicorn ist ein Python-WSGIHTTP-Server zum Ausführen von Python-Webanwendungen. Im Folgenden erfahren Sie, wie Sie Gunicorn unter CentOS installieren.

Wie verbessert Gunicorn die Leistung von Flask-Anwendungen? Mit der rasanten Entwicklung des Internets wird die Leistung von Webanwendungen immer wichtiger für das Benutzererlebnis und die Wettbewerbsfähigkeit von Unternehmen. Bei der Verarbeitung hoher gleichzeitiger Anforderungen kann der Standardentwicklungsserver des Flask-Frameworks die Anforderungen häufig nicht erfüllen. Daher müssen wir Gunicorn (GreenUnicorn) verwenden, um die Leistung von Flask-Anwendungen zu verbessern. Gunicorn ist ein Python-basierter HTTP-Server, der Pre-Forked verwendet
