Traitement multithread en python

Python ne convient pas au traitement multithread

on dit que python est un langage qui ne convient pas au multithreading. C'est parce que python utilise GIL.

Qu'est-ce que 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.

Il existe également un module qui libère GIL

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

Traitement multithread en python
Traitement de fichiers en Python
Traitement de texte avec Python
Traitement des requêtes en Python
Traitement de texte UTF8 avec python
Traitement asynchrone (threading) en python
Collection de traitement d'image en Python
Utilisation du mode Python dans le traitement
Traitement du signal en Python (1): transformée de Fourier
100 Language Processing Knock Chapitre 1 en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
traitement d'image python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
Traitement de fichiers Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Traitez facilement des images en Python avec Pillow
Traitement des interdictions en double dans la banque de données GAE / Python
Statut de chaque système de traitement Python en 2020
Liste triée en Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python