on dit que python est un langage qui ne convient pas au multithreading. C'est parce que python utilise GIL.
GIL:Global Interpreter lock Un mécanisme pour garantir que le bytecode est exécuté par un seul thread à la fois. Ceci est utilisé en python, donc fondamentalement le multithreading n'est pas possible.
--Avantages de GIL Accélérez les programmes à un seul thread
Depuis l'adoption du GIL, est-il préférable que le traitement parallèle soit basé sur des processus? Il paraît que.
Certaines extensions python sont conçues pour libérer GIL lors de l'exécution de tâches de compression ou de hachage intensives en calcul.
Exemple
multithread.py
import threading, zipfile
#Classe pour compresser des fichiers.GIL est libéré
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) #Compression normale
f.write(self.infile)
f.close()
print('background zip compress process finished : ', self.infile)
# mydata.txt est préparé de manière appropriée
background = AsyncZip('mydata.txt', 'myarchive.zip')
#Confirmez que le programme principal est actif en même temps même si le traitement en arrière-plan est exécuté
background.start()
print('main program still working')
#Assurez-vous que le programme principal est actif jusqu'à ce que le traitement en arrière-plan soit terminé
background.join()
print('main program was waiting for a background thread')
Résultat d'exécution
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