Найти тему
SCIENCE IT

Une affaire avec binären un données structurées

https://as1.ftcdn.net/jpg/01/16/75/94/500_F_116759428_7vEdgiDCRxsY3i9xhCmfYd5wgtUnX4qU.jpg
https://as1.ftcdn.net/jpg/01/16/75/94/500_F_116759428_7vEdgiDCRxsY3i9xhCmfYd5wgtUnX4qU.jpg

Le module struct fournit les fonctions pack() et unpack(), qui peuvent être utilisées pour traiter des données binaires structurées. L'exemple suivant montre comment lire les informations d'en-tête d'une archive ZIP sans utiliser le module zipfile. Les codes d'emballage "H" et "I" représentent respectivement deux octets et quatre octets entiers non signés. Le caractère "<" signifie que les tailles standard sont de l'ordre des octets "Little Endian" :

structure des importations
avec open('myfile.zip','rb') comme f :
data = f.read()
début = 0
pour i in range(3) : # affiche les 3 premiers en-têtes de fichier
Démarrage += 14
fields = struct.unpack('<IIIHHHHH', data[start:start:start+16])))
crc32, comp_size, uncomp_size, filenamesize, extra_size = champs
début += 16
nom du fichier = données[start:start:start:start:start+fileize name].
start += taille du nom du fichier
extra = données[start:start:start:start:start+extra_size].
print(nom de fichier, hexagone(crc32), comp_size, uncomp_size)
start += extra_size + comp_size # saut à l'en-tête suivant

Enfilage multiple

Le filetage est une méthode de découplage de processus qui ne dépendent pas directement les uns des autres. Les discussions peuvent être utilisées pour empêcher les programmes qui acceptent les entrées de l'utilisateur pendant les calculs de "pendre". Un but similaire est d'utiliser un thread pour les E/S et un autre pour les calculs.

  • Ce code montre comment le module de filetage peut être utilisé pour exécuter des processus en arrière-plan alors que le programme principal continue à fonctionner en parallèle :
importation de fils de discussion, fichiers zip
classe AsyncZip (thread) :
def __init__(auto, infile, outfile, outfile, outfile) :
fil.de.fil.__init__(auto)
Self.infile = infile
self.outfile = fichier de sortie
def run :
f = fichier zip.ZipFile(self.outfile,'w', zipfile.ZIP_DEFLATED)
f.write (auto-infile)
f.close()
print('Zippage terminé en arrière-plan:'', self.infile)
background = AsyncZip('mydata.txt','myarchive.zip')
background.start()
print("Le programme principal est toujours en cours d'exécution.")
background.join() # Attendez la fin du thread.
print('Le programme principal a attendu la fin du processus en arrière-plan.
"J'ai attendu.)

Le principal problème des programmes multithreads est la coordination de l'accès aux données partagées ou à d'autres ressources. C'est pourquoi le module de filetage offre des méthodes de synchronisation telles que des verrouillages, des événements, des variables d'état et des feux tricolores.

La meilleure façon, cependant, est de coordonner tous les accès aux ressources dans un fil de discussion. Le module file d'attente est utilisé pour recevoir les requêtes d'autres threads dans celui-ci. Les programmes qui utilisent des objets en file d'attente comme moyen de communication entre leurs threads sont plus faciles à développer, plus lisibles et plus stables.

InscriptionLe formulaire d'inscription permet la création détaillée et flexible de fichiers journaux. Dans le cas le plus simple, les logs sont écrits dans un fichier ou envoyés à sys.stderr :

Importer la journalisation
logging.debug('Informations de débogage')
logging.info("Informations")
logging.warning('Avertissement:%s de fichier non trouvés','server.conf')
logging.error('Erreur')
logging.critical('Erreur critique!')

La sortie des messages de niveau info et de débogage est supprimée par défaut ; les autres messages sont envoyés à sys.stderr. Les messages peuvent également être envoyés par e-mail, paquets de données (UDP), sockets (TCP) ou à un serveur HTTP. Les filtres peuvent également décider quels messages envoyer - selon la priorité : CORRIGER, INFO, ATTENTION, ERREUR et CRITIQUE.

Le système de journalisation peut être configuré directement avec Python ou sa configuration peut être lue à partir d'un fichier de configuration défini par l'utilisateur sans avoir à modifier le programme lui-même.

Faibles références

Python permet une gestion automatique de la mémoire (comptage de référence pour la plupart des objets et collecte des déchets). La mémoire est libérée peu après la résolution de la dernière référence à un objet.

Cette approche fonctionne bien pour la plupart des applications, mais à l'occasion, il peut être nécessaire de stocker des objets uniquement jusqu'à ce qu'ils soient utilisés ailleurs. Cependant, cela seul conduit à la création d'une référence à l'objet qui le rend permanent. Avec le module weakref, les objets peuvent être maintenus sans créer de référence. Si l'objet n'est plus nécessaire, il est automatiquement supprimé d'une table avec des références dites faibles et appelé fonction de rappel pour les objets weakref. Le module struct fournit les fonctions pack() et unpack(), qui peuvent être utilisées pour traiter des données binaires structurées. L'exemple suivant montre comment lire les informations d'en-tête d'une archive ZIP sans utiliser le module zipfile. Les codes d'emballage "H" et "I" représentent respectivement deux octets et quatre octets entiers non signés. Le caractère "<" signifie que les tailles standard sont de l'ordre des octets "Little Endian" :

structure des importations
avec open('myfile.zip','rb') comme f :
data = f.read()
début = 0
pour i in range(3) : # affiche les 3 premiers en-têtes de fichier
Démarrage += 14
fields = struct.unpack('<IIIHHHHH', data[start:start:start+16])))
crc32, comp_size, uncomp_size, filenamesize, extra_size = champs
début += 16
nom du fichier = données[start:start:start:start:start+fileize name].
start += taille du nom du fichier
extra = données[start:start:start:start:start+extra_size].
print(nom de fichier, hexagone(crc32), comp_size, uncomp_size)
start += extra_size + comp_size # saut à l'en-tête suivant
enfilage multiple

Le filetage est une méthode de découplage de processus qui ne dépendent pas directement les uns des autres. Les discussions peuvent être utilisées pour empêcher les programmes qui acceptent les entrées de l'utilisateur pendant les calculs de "pendre". Un but similaire est d'utiliser un thread pour les E/S et un autre pour les calculs.

Ce code montre comment le module de filetage peut être utilisé pour exécuter des processus en arrière-plan alors que le programme principal continue à fonctionner en parallèle :

importation de fils de discussion, fichiers zip
classe AsyncZip (thread) :
def __init__(auto, infile, outfile, outfile, outfile) :
fil.de.fil.__init__(auto)
Self.infile = infile
self.outfile = fichier de sortie
def run :
f = fichier zip.ZipFile(self.outfile,'w', zipfile.ZIP_DEFLATED)
f.write (auto-infile)
f.close()
print('Zippage terminé en arrière-plan:'', self.infile)
background = AsyncZip('mydata.txt','myarchive.zip')
background.start()
print("Le programme principal est toujours en cours d'exécution.")
background.join() # Attendez la fin du thread.
print('Le programme principal a attendu la fin du processus en arrière-plan.
"J'ai attendu.)

Le principal problème des programmes multithreads est la coordination de l'accès aux données partagées ou à d'autres ressources. C'est pourquoi le module de filetage offre des méthodes de synchronisation telles que des verrouillages, des événements, des variables d'état et des feux tricolores.

La meilleure façon, cependant, est de coordonner tous les accès aux ressources dans un fil de discussion. Le module file d'attente est utilisé pour recevoir les requêtes d'autres threads dans celui-ci. Les programmes qui utilisent des objets en file d'attente comme moyen de communication entre leurs threads sont plus faciles à développer, plus lisibles et plus stables.

Inscription

Le formulaire d'inscription permet la création détaillée et flexible de fichiers journaux. Dans le cas le plus simple, les logs sont écrits dans un fichier ou envoyés à sys.stderr :

Importer la journalisation
logging.debug('Informations de débogage')
logging.info("Informations")
logging.warning('Avertissement:%s de fichier non trouvés','server.conf')
logging.error('Erreur')
logging.critical('Erreur critique!')

La sortie des messages de niveau info et de débogage est supprimée par défaut ; les autres messages sont envoyés à sys.stderr. Les messages peuvent également être envoyés par e-mail, paquets de données (UDP), sockets (TCP) ou à un serveur HTTP. Les filtres peuvent également décider quels messages envoyer - selon la priorité : CORRIGER, INFO, ATTENTION, ERREUR et CRITIQUE.

Le système de journalisation peut être configuré directement avec Python ou sa configuration peut être lue à partir d'un fichier de configuration défini par l'utilisateur sans avoir à modifier le programme lui-même.

Faibles références

Python permet une gestion automatique de la mémoire (comptage de référence pour la plupart des objets et collecte des déchets). La mémoire est libérée peu après la résolution de la dernière référence à un objet.

Cette approche fonctionne bien pour la plupart des applications, mais à l'occasion, il peut être nécessaire de stocker des objets uniquement jusqu'à ce qu'ils soient utilisés ailleurs. Cependant, cela seul conduit à la création d'une référence à l'objet qui le rend permanent. Avec le module weakref, les objets peuvent être maintenus sans créer de référence. Si l'objet n'est plus nécessaire, il est automatiquement supprimé d'une table avec des références dites faibles et appelé fonction de rappel pour les objets weakref.

https://as1.ftcdn.net/jpg/01/16/75/92/500_F_116759237_5R3C5N66rnu5VCgJ7JocOaqtTrVyXFeS.jpg
https://as1.ftcdn.net/jpg/01/16/75/92/500_F_116759237_5R3C5N66rnu5VCgJ7JocOaqtTrVyXFeS.jpg