Python pour ingénieurs - cours 65 000 roubles. de Slurm, formation 3 mois, Date 15 janvier 2024.
Miscellanea / / November 27, 2023
Techlead, Data Engineer chez Skyeng / ex Slurm, ISPsystem, Grid Dynamics
Sr. Ingénieur logiciel en Test, Auriga, ex FAIsystem
#1: Syntaxe et structures de base de Python
Pourquoi: apprendre à comprendre la logique des programmes Python, ainsi qu'à écrire des programmes simples, est la tâche la plus importante. « Génial » si vous n'êtes pas familier avec la syntaxe Python.
- Types de données et variables, types de données mutables/immuables et simples/composites, techniques de débogage.
- Instruction conditionnelle: opérateurs logiques, conditions simples, conditions imbriquées et remplacement d'instructions switch.
- Boucles de base - boucles while et for, itérateurs, interruptions de boucle.
- Fonctions, méthodes de chaînes, listes et dictionnaires.
- Génération et gestion des exceptions.
Pratique: un ensemble de petites microtâches pour chaque leçon.
#2: Maîtrise améliorée de Python: optimisations et POO
Pourquoi: Maîtrisons les fonctionnalités de Python - c'est grâce à elles qu'il est si simple et pratique. Nous révélerons également la signification de ces trois lettres (nous parlons de POO) sans théorie académique et avec un objectif clair
- Travail avancé avec les boucles - instruction rendement et générateurs, informations sur les boucles en Python, instruction else dans une boucle, optimisation des boucles de compréhension, etc.
- Types particuliers de structures: Frozendict, Defaultdict, etc.
- Concepts de base de la POO: classes, instances de classe, encapsulation, héritage et polymorphisme.
- Création de gestionnaires de contexte pour vos types: la construction with.
Pratique: un ensemble de petites microtâches pour chaque leçon.
Pratique avancée: Audit de l'utilisation des services.
Le CTO a commencé à soupçonner que certains services n'étaient plus utilisés par les équipes. Le problème est que le module de suivi des services utilisés n'a pas été mis à jour depuis dix ans: il ne peut télécharger des données agrégées et le format des valeurs renvoyées ne correspond pas à ceux généralement acceptés normes. Vous avez été choisi pour extraire les métriques capturées, les regrouper par type et par équipe, et fournir ces informations au CTO pour une première évaluation de l'ampleur du problème.
#3: Connexions réseau
Pourquoi: Presque tous les services disposent d'une interface permettant de se connecter via un protocole réseau. Et sans connexion, l’interaction est impossible. Heureusement, l'écosystème Python dispose de modules clients pour presque tous les protocoles.
- Package Pip et installation de modules tiers.
- Module Paramiko pour exécuter des commandes via ssh.
- Le module de requêtes pour faire des requêtes HTTP.
- Présentation des modules pour travailler avec des bases de données et des courtiers de messages.
Pratique. L'équipe de développement introduit une nouvelle méthodologie: si vous autorisez l'apparition d'une alerte, vous recevrez une tâche. Le sous-système analytique recherche uniquement les erreurs sélectionnées et envoie des messages à leur sujet au courtier de messages Kafka. Votre tâche consiste à terminer le cycle de renvoi des bogues aux développeurs: votre consommateur doit créer automatiquement des tâches avec la description et la priorité requises dans Trello.
N°4: Travailler avec du texte dans différents formats
Pourquoi: La connexion au service ne représente que la moitié de la bataille. L’autre moitié est le partage d’informations. Et les informations sont souvent un ensemble de caractères de texte dans un certain format. Les modules vous aideront à décoder et à encoder. Vous n'avez pas besoin de toutes les informations? Les expressions régulières vous aideront à extraire ce qui est important et à supprimer le reste.
- Le module re et les expressions régulières.
- Modules pour travailler avec des données dans différents formats: valeurs séparées, json, yaml, xml.
- Utilisation d'arguments de ligne de commande: module argparse.
Pratique: Créer une source de données d'utilisation des services.
Lors de l'audit de l'utilisation des services, vous avez identifié des informations importantes pour l'entreprise, même le PDG s'est intéressé. Il a été décidé d'analyser l'argent perdu et de ne plus permettre que de telles situations se reproduisent. Pour ce faire, vous devez doter les analystes d’un outil d’acquisition de données afin qu’ils puissent préparer des rapports. Le problème est que le module de surveillance renvoie les limites de service pour une demande distincte au format yaml, et les prix des services sont renvoyés par le système de facturation au format XML. Il est nécessaire de combiner les données sur la charge actuelle avec les limites et les prix. Le service d'analyse a demandé des informations agrégées au format JSON avec la possibilité de spécifier un intervalle de temps et une étape d'agrégation.
N°5: Interaction avec le système d'exploitation
Pourquoi: L'importance d'interagir avec le système d'exploitation n'a pas besoin d'être expliquée davantage. Comment le connecter à Python se trouve dans cette leçon.
- Lecture et écriture de fichiers.
- module os - lecture des variables d'environnement, utilisation des répertoires et des droits, utilisation des processus.
- Le module de sous-processus pour une interaction interactive avec les processus.
Pratique: fourniture automatique d'accès aux serveurs.
Lors de la campagne d'abandon des services inutilisés, une situation curieuse s'est produite: un serveur d'épicerie les équipes ont été fermées, mais l'équipe d'infrastructure l'a utilisé périodiquement comme hôte pour mise en scène. Il s'est avéré que l'équipe produit ne l'utilisait pas car, périodiquement, quelqu'un écrasait ses paramètres par les siens. Il a été décidé que désormais la ressource ne serait attribuée qu'aux membres d'une seule équipe et que l'automatisation permettrait d'éviter les erreurs. En tant que celui qui a déclenché ce gâchis, vous devez écrire à un agent qui interrogera périodiquement le système de gestion des droits et apporter des modifications à la configuration des droits au sein des services installés et, si nécessaire, donner aux services une commande pour relire configurations.
N°6: Opérateur K8S en Python (flux de live-coding)
13 octobre à 19h00
Pourquoi: étendons les capacités de K8S en fonction de vos tâches.
N°7: Écrire notre propre module pour Ansible
Pourquoi: Ansible est un système de gestion de configuration puissant, et même extensible avec ses propres modules. Quelle coïncidence si lui-même et la plupart des modules sont écrits en Python.
- Écrire vos propres modules pour Ansible.
Pratique: rédaction d'un module de gestion des droits.
Il y a bien longtemps, dans une galaxie très lointaine, vous aviez déjà écrit à un agent pour délivrer des droits sur certains services. Il est temps de remplacer le pull par le push et Ansible vous y aidera. Tout ce dont vous avez besoin est juste un module.
N°8: Création et cas d’usage de votre API
Pourquoi: La préparation du code pour le déploiement est l'une des tâches les plus importantes. Nos propres scripts pour les pipelines de scène contribuent à rendre ce processus plus flexible et plus pratique.
- Création d'une API REST dans Flask.
- Création de votre propre exportateur Prometheus avec Prometheus Python Client et Flask.
Pratique: télécharger des données vers un système de surveillance tiers.
Les coûts des équipements inutilisés ont dépassé même les prévisions les plus pessimistes. Désormais, l'équipe d'ingénierie a un autre domaine de responsabilité: la surveillance des services inutilisés. Pour ce faire, vous devez interroger périodiquement le système de facturation via votre script et transmettre les données à Prometheus. Le format des données reçues n'est toujours pas adapté. Vous devez implémenter un connecteur. Et en même temps, écrivez un point de terminaison afin que le service d'analyse dispose toujours d'informations à jour au format JSON.
Session AMA + rencontre INFORMELLE avec les intervenants du cours
28 octobre à 19h00
Nous nous réunissons pour discuter des préoccupations des participants au cours.
#9: Tester l'API de votre application
Pourquoi: Parfois, il vaut mieux ne pas avoir de code plutôt qu'un code instable. Afin de ne pas avoir peur de casser votre code, vous devez écrire des tests.
- Types de tests: unitaires, d'intégration et de bout en bout.
- Présentation du module pyhamcrest et de ses matchers.
- Architecture et capacités de pytest.
- Utiliser pytest et pyhamcrest pour écrire des tests unitaires.
Pratique: écrire des tests en utilisant pytest et pyhamcrest pour votre API.
N°10: Interaction avec les systèmes CVS et DevOps
- Utilisation de modules tiers en utilisant l'exemple d'intégration dans les pipelines Gitlab.
- Utiliser pygit pour obtenir des informations sur les modifications de code.
Pratique: générer un journal des modifications à partir des commits.
L’équipe d’ingénierie a tellement aimé vos solutions qu’elle s’en est inspirée et a commencé à écrire les siennes. Mais les gens oublient toujours d’écrire des descriptions pour les sorties. Pour y parvenir, l'équipe a décidé d'implémenter des conventions de commit et de générer des journaux de modifications directement à partir des commits lorsque fusionner la branche dev avec celle de la version, et si le nom du commit n'est pas conforme aux conventions de commit, n'autorisez pas la demande de fusion avant fusionner.
#11: Chatops avec Errbot en Python
Pourquoi: Les principaux problèmes commerciaux ne sont pas les performances des applications ni même les erreurs survenues dans le code. Les problèmes les plus graves surviennent lorsque la communication avec les employés est inefficace. Chatops est un moyen de résoudre ce problème.
- Concept Chatops: quels problèmes Chatops résout-il ?
- Framework Errbot: installation, création d'un template de plugin de base, configuration et lancement.
- Framework Errbot: création de votre propre plugin pour Chatops avec diverses options de traitement des messages.
Projet final
Révision des délais et protection pour les personnes intéressées
Après le cours, vous aurez un projet sur Git: vous pourrez automatiser votre tâche de travail ou réaliser l'une des options proposées.
Le projet terminé peut être utilisé comme dossier de portfolio et présenté lors de la candidature à un emploi.