Wann sollte man Multiprozessprogrammierung in Python verwenden?

(*-*)浩
Freigeben: 2019-06-25 11:02:06
Original
2175 Leute haben es durchsucht

Bei der gleichzeitigen Programmierung sind Multithreading und Multiprozess zwei Modi, die häufig verwendet werden (zusätzlich zu Coroutinen usw.). Aufgrund der GIL-Einschränkungen von CPython (Jython und IronPython haben keine GIL, PyPy versucht, die GIL zu entfernen) können nur Threads, die die GIL erhalten haben, die CPU nutzen, sodass sie möglicherweise zusätzlich einige E/A verarbeiten müssen blockiert (Lesen und Schreiben von Dateien, Zugriff auf das Netzwerk usw.), wird im Grunde niemand das Multithreading von CPython verwenden. Daher wird in diesem Artikel über eine nützlichere Python-Multiprozessprogrammierung gesprochen.

Wann sollte man Multiprozessprogrammierung in Python verwenden?

Hinweis: Empfohlenes Lernen: Python-Video-Tutorial)

Die hier beschriebene Umgebung Artikel ist CPython unter dem Linux-Betriebssystem (gilt auch für die meisten POSIX-Systeme) und ist möglicherweise nicht auf Windows-Betriebssysteme oder andere Python-Implementierungen anwendbar.

Um Mehrdeutigkeiten zu vermeiden, wird im Folgenden „Hauptprozess“ oder „aktueller Prozess“ verwendet, um auf den Prozess zu verweisen, der den untergeordneten Prozess erstellt hat, und nicht „übergeordneter Prozess“, es sei denn, „xx ist übergeordneter Prozess“. ausdrücklich angegeben.

Anders als bei der Multithread-Programmierung muss ein aufrufbares Objekt übergeben werden. Bei der Multiprozessprogrammierung wird der Hauptprozess in den untergeordneten Prozess kopiert, und der untergeordnete Prozess kann nicht direkt zur Ausführung eines aufrufbaren Objekts aufgefordert werden .

In POSIX-Systemen wird dieser Kopiervorgang durch die Systemaufrufe clone() und fork() abgeschlossen, wobei letzterer im Allgemeinen verwendet wird.
Wenn fork() erfolgreich ausgeführt wird, werden die PID und 0 des untergeordneten Prozesses im Hauptprozess bzw. im untergeordneten Prozess zurückgegeben, und dann beginnt der Ausführungscode unterschiedlich zu sein. Wenn dies fehlschlägt (nicht genügend Speicher, PID erreicht die Obergrenze usw.), wird der untergeordnete Prozess nicht erstellt, der Hauptprozess gibt -1 zurück und errno wird auf den entsprechenden Fehlercode gesetzt.
In der Implementierung von CPython ist os.fork() hauptsächlich eine Kapselung der Funktion fork(). Der Unterschied besteht darin, dass ein OSError ausgelöst wird. Das errno-Attribut der Ausnahme ist der entsprechende Fehlercode.

Daher sieht der Multiprozess-Python-Code ungefähr so ​​aus:

import os

try:
    pid = os.fork()
    if pid == 0:  # 子进程
        # 子进程的代码
    else:  # 主进程
        # 主进程的代码
except OSError:
    # 主进程处理 fork 失败的代码
Nach dem Login kopieren

Weitere technische Artikel zum Thema Python finden Sie im Python-Tutorial Kolumne Fang an zu lernen!

Das obige ist der detaillierte Inhalt vonWann sollte man Multiprozessprogrammierung in Python verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!