Python soll eine Sprache sein, die nicht für Multithreading geeignet ist. Das liegt daran, dass Python GIL verwendet.
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.
Nachteile von GIL Beschränkt auf einen Thread, der gleichzeitig ausgeführt werden kann
Vorteile von GIL Beschleunigen Sie Single-Thread-Programme
Ist Parallelverarbeitung seit Einführung von GIL besser prozessbasiert? Es scheint, dass.
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