Multithread-Verarbeitung in Python

Python ist nicht für die Multithread-Verarbeitung geeignet

Python soll eine Sprache sein, die nicht für Multithreading geeignet ist. Das liegt daran, dass Python GIL verwendet.

Was ist GIL?

GIL:Global Interpreter lock Ein Mechanismus, der sicherstellt, dass Bytecode jeweils nur von einem Thread ausgeführt wird. Dies wird in Python übernommen, sodass Multithreading grundsätzlich nicht möglich ist.

Ist Parallelverarbeitung seit Einführung von GIL besser prozessbasiert? Es scheint, dass.

Es gibt auch ein Modul, das GIL freigibt

Einige Python-Erweiterungen sind so konzipiert, dass GIL freigegeben wird, wenn Komprimierungs- oder Hashing-rechenintensive Aufgaben ausgeführt werden.

Beispiel

multithread.py



import threading, zipfile

#Klasse zum Komprimieren von Dateien.GIL wird freigegeben
class AsyncZip(threading.Thread):
    def __init__(self, infile, outfile):
        threading.Thread.__init__(self)
        self.infile = infile
        self.outfile = outfile
​
    def run(self):
        f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED) #Normale Komprimierung
        f.write(self.infile)
        f.close()
        print('background zip compress process finished : ', self.infile)
​
# mydata.txt ist entsprechend vorbereitet
background = AsyncZip('mydata.txt', 'myarchive.zip')

#Stellen Sie sicher, dass das Hauptprogramm gleichzeitig aktiv ist, auch wenn die Hintergrundverarbeitung ausgeführt wird
background.start()
print('main program still working')
​
#Stellen Sie sicher, dass das Hauptprogramm aktiv ist, bis die Hintergrundverarbeitung abgeschlossen ist
background.join()
print('main program was waiting for a background thread')

Ausführungsergebnis

C:\Users\NAME\.PyCharmCE2019.2\system\workspace>python3 multithread.py
main program still working
background zip compress process finished: mydata.txt
main program was waiting for a background thread

Recommended Posts

Multithread-Verarbeitung in Python
Dateiverarbeitung in Python
Textverarbeitung mit Python
Verarbeitung in Python beenden
UTF8-Textverarbeitung mit Python
Asynchrone Verarbeitung (Threading) in Python
Bildverarbeitungssammlung in Python
Verwenden des Python-Modus in der Verarbeitung
Signalverarbeitung in Python (1): Fourier-Transformation
100 Sprachverarbeitung Knock Kapitel 1 in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Python-Bildverarbeitung
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Python-Dateiverarbeitung
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Doppelte Verbotsverarbeitung im GAE / Python-Datenspeicher
Status jedes Python-Verarbeitungssystems im Jahr 2020
Sortierte Liste in Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python