{"id":21026647,"url":"https://github.com/jeremiegince/parallelismintroduction","last_synced_at":"2025-03-13T18:43:24.426Z","repository":{"id":112352203,"uuid":"452428625","full_name":"JeremieGince/ParallelismIntroduction","owner":"JeremieGince","description":"Introduction au parallélisme en python","archived":false,"fork":false,"pushed_at":"2022-03-07T16:58:29.000Z","size":4465,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T14:34:57.845Z","etag":null,"topics":["exercise","multiprocessing","multithreading","python","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JeremieGince.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-26T20:24:27.000Z","updated_at":"2022-03-06T02:07:03.000Z","dependencies_parsed_at":"2023-05-13T18:15:14.631Z","dependency_job_id":null,"html_url":"https://github.com/JeremieGince/ParallelismIntroduction","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremieGince%2FParallelismIntroduction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremieGince%2FParallelismIntroduction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremieGince%2FParallelismIntroduction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeremieGince%2FParallelismIntroduction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JeremieGince","download_url":"https://codeload.github.com/JeremieGince/ParallelismIntroduction/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243463487,"owners_count":20295117,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exercise","multiprocessing","multithreading","python","tutorial"],"created_at":"2024-11-19T11:45:40.298Z","updated_at":"2025-03-13T18:43:24.398Z","avatar_url":"https://github.com/JeremieGince.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Introduction au parallélisme\n============================\n\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/JeremieGince/ParallelismIntroduction/blob/main/images/0011187_hobo-advanced-weather-station-kit_510.png?raw=true\"\u003e \u003c/p\u003e\n\n---------------------------------------------------------------------------\n\nDans le cadre de cet exercice vous aurez à faire un mini-projet impliquant à la fois du multiprocessing et du \nmultithreading. \n\n### Contexte\nVous vous faites une petite station météo avec un petit ordinateur n'ayant pas beaucoup de ressources\ncomputationel. En effet, votre ordinateur a accès à seulement 3 CPU, un nombre plutot étrange, mais \nqui fera l'affaire pour les besoins de la cause. Vous n'avez pas beaucoup de CPU, mais vous voulez tous les utiliser \nce qui est normal, car quand on achète une machine étrange à 3 CPU, on veut utiliser les 3 CPU. Vous avez également\n4 senseurs:\n- Un thermomètre;\n- Un détecteur de point de rosé;\n- Un détecteur d'humidité;\n- Un détecteur de pression.\n\n### Objectif\nVous voulez enregistrer des statistiques des senseurs à tous les jours et les afficher en temps\nréel, question de voir ce qui se passe dehors depuis les derniers jours. De plus, vous voulez utiliser\nvos 3 CPU et vous voulez que le tout soit le plus parraléliser possible. Voici donc ce qui va se passer\nsur les différents processus de votre application:\n\n__Processus principal__:\nCe processus servira à gérer les autre processus, c'est-à-dire à les lancer en début de journée et à les arrêter\nen fin de journée.\n\n__Processus des senseurs__:\nDans ce processus vous voudrais lancer k threads pour lire et enregistrer les mesures prises par chacun de vos k \nsenseurs.\n\nVous allez devoir enregistrer toutes les statistiques de tous vos senseurs dans le même fichier de la façon suivante:\n\n| Date   |TempHighF| TempAvgF     | TempLowF | DewPointHighF | DewPointAvgF | DewPointLowF | HumidityHighPercent | HumidityAvgPercent | HumidityLowPercent |\n|--------|----|--------------|----------|---------------|--------------|--------------|---------------------|--------------------|--------------------|\n| date 0 |max temp| moyenne temp | min temp | max temp| moyenne temp | min temp| max %| moyenne %| min %|\n| date 1 |max temp| moyenne temp | min temp | max temp| moyenne temp | min temp| max %| moyenne %| min %|\n| ...    |...|...|...|...|...|...|...|...|...|\n| date N |max temp| moyenne temp | min temp | max temp| moyenne temp | min temp| max %| moyenne %| min %|\n\nDonc, dans une seule journée, vous allez lire des mesures de vos senseurs avec la méthode Sensor.read et vous allez\ndevoir garder en mémoire la valeur minimale courante de la journée ainsi que la valeur maximale et moyenne de cette \njournée.\n\n*Tips*: Vous allez avoir k threads qui écrivent dans un même ficher 'en même temps', vous allez donc surement avoir\nbesoin d'utiliser une serrure (un Lock).\n\n\n__Processus d'affichage__:\nDans ce processus, vous aller lire ce que vous avez enregistré avec vos threads de senseurs. Vous pouvez faire ce que\nvous voulez pour que ce soit agréable à regarder. Dans notre, cas nous avons affiché les données des jours précédants \net nous ajustons les données du jour courant en temps réel. Chaque senseur est dans un subplot différants et nous avons \nutilisé matplotlib.\n\n\n### Tâche\nVous devez implémenter toutes les méthodes du folder .exercice contenant un 'TODO' dans la documentation. Ces méthodes\nlance chacune une exception de non-implémentation. Vous pouvez donc lancer le script './_\\_main__.py' et implémenter les\nméthodes qui lancent ce type d'erreur.\n\n\n## Setup\n\n- Cloner le répertoire présent.\n- Créer votre environnement virtuel pour ce mini-projet\n- Installer les dépendances avec \n  - ```pip install -r requirements.txt```\n\n\n## Références\n- Pour plus d'information sur comment utiliser git:\n    - [TutorielPython-Manuel/git](https://github.com/JeremieGince/TutorielPython-Manuel/tree/master/Cycle-de-developpement-avec-git)\n- Pour plus d'information sur comment créer un environnement virtuel:\n    - [TutorielPython-Manuel/Environments](https://github.com/JeremieGince/TutorielPython-Manuel/tree/master/Environments)\n- Si vous désirez avoir des ressources au niveau de l'affichage avec python:\n  - [Atelier de visualisation du ProgFest](https://github.com/rem657/AtelierVisualisation)\n- Pour plus d'information sur le parralélisme avec python:\n  - [GabGabG/pythonMultiprocessing](https://github.com/GabGabG/pythonMultiprocessing)\n\n\n## Solution\nLa solution est fournie dans le dossier './solution'.\n\n\n---------------------------------------------------------------------------\n\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/JeremieGince/ParallelismIntroduction/blob/main/images/progfest_logo.png?raw=true\"\u003e \u003c/p\u003e\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremiegince%2Fparallelismintroduction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeremiegince%2Fparallelismintroduction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremiegince%2Fparallelismintroduction/lists"}