{"id":192920,"date":"2024-02-29T09:40:11","date_gmt":"2024-02-29T08:40:11","guid":{"rendered":"https:\/\/liora.io\/de\/?p=192920"},"modified":"2026-02-06T06:00:03","modified_gmt":"2026-02-06T05:00:03","slug":"maximiere-die-effizienz-deiner-python-anwendungen-mit-python-threads","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/maximiere-die-effizienz-deiner-python-anwendungen-mit-python-threads","title":{"rendered":"Maximiere die Effizienz deiner Python-Anwendungen mit Python Threads"},"content":{"rendered":"<style>\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><p><strong>Mehrere Aufgaben gleichzeitig auszuf\u00fchren scheint eine unleugbare Quelle der Einsparung bei der Ausf\u00fchrung von Programmen zu sein. Python bietet daf\u00fcr eine L\u00f6sung, die als &#8222;Threading&#8220; bezeichnet wird. Threading ist jedoch komplexer, als es auf den ersten Blick scheint, und seine Beherrschung erfordert eine gr\u00fcndliche Analyse der von einem Programm erwarteten Funktionen. Au\u00dferdem f\u00fchrt der Threading-Mechanismus von Python nicht zu einer effektiven Parallelisierung der verschiedenen Prozesse. Weitere Erkl\u00e4rungen folgen.<\/strong><\/p>\t\t\n\t\t<p>Angenommen, du hast eine Reihe von Aufgaben zu erledigen:<\/p><ul><li>Einen Vortrag f\u00fcr ein bevorstehendes Treffen verfassen.<\/li><li>Drei potenzielle Kunden anrufen.<\/li><li>Angebote verfassen.<\/li><\/ul><p>Du kannst diese Aufgaben nacheinander erledigen. Du kannst dich aber auch auf dein Team verlassen und die Aktivit\u00e4ten so verteilen, dass sie parallel erledigt werden. Es versteht sich von selbst, dass das Ganze dann <strong>schneller erledigt ist.<\/strong><\/p><p>Bei der <strong>Programmierung mit Python funktioniert das &#8222;Threading&#8220;<\/strong> nach einer \u00e4hnlichen Logik. Anstatt eine einzige Reihe von Anweisungen auszuf\u00fchren, kann ein Programm mehrere &#8222;<strong>Python Threads<\/strong>&#8220; verwalten, d. h. unabh\u00e4ngige Prozesse, die mehr oder weniger parallel laufen. Das Ergebnis ist in der Regel ein insgesamt effizienteres Programm.<\/p><p>In Wirklichkeit ist es aber nicht so einfach, denn es kann zu Koordinationsproblemen kommen. Nehmen wir das oben genannte Beispiel.<\/p><p>Eine Detailfrage in einem der Angebote k\u00f6nnte zum Teil von dem Gespr\u00e4ch mit einem der Interessenten abh\u00e4ngen. Daher kann das Angebot erst nach Abschluss des Gespr\u00e4chs fertiggestellt werden. Solche Situationen werden auch im<strong> IT-Bereich<\/strong> vorkommen.<\/p><p>Daher ist es notwendig, die <strong>Python Threads<\/strong> gut zu organisieren und ihren Fortschritt zu koordinieren.<\/p><p>Das <strong>Python-Threading<\/strong> erfordert also eine vorherige Analyse, um idealerweise voneinander unabh\u00e4ngige Aufgaben zu isolieren und, falls dies nicht m\u00f6glich ist, ihre Ausf\u00fchrung zeitlich zu koordinieren.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Lernen, in Python zu programmieren<\/a><\/div><\/div>\n\n\t\t\t<h3>Was ist ein Thread?<\/h3>\t\t\n\t\t<p>Ein<strong> Python Thread<\/strong> ist ein separater Ausf\u00fchrungsablauf innerhalb eines Programms.<\/p><p>Wenn du ein Python-Skript startest, startest du standardm\u00e4\u00dfig eine Instanz des Python-Interpreters. Dein Code wird daher normalerweise in einem einzelnen Thread ausgef\u00fchrt.<\/p><p>Es ist jedoch m\u00f6glich, ein Python-Programm so zu gestalten, dass es bestimmte Aufgaben nebeneinander ausf\u00fchrt. In diesem Zusammenhang haben wir es dann mit mehreren Threads zu tun.<\/p><p>Ein Python-Prozess, der das &#8222;Threading&#8220; ausnutzt, wird beendet, wenn alle Threads abgeschlossen sind.<\/p><p>&nbsp;<\/p><p>?Auch interessant:<\/p><table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" data-sheets-root=\"1\"><colgroup><col width=\"1116\"><\/colgroup><tbody><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Python - Vermeide diese Fehler&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/python-fehler-diese-solltest-du-vermeiden\"><a href=\"https:\/\/liora.io\/de\/python-fehler-diese-solltest-du-vermeiden\" target=\"_blank\" rel=\"noopener\">Python &#8211; Vermeide diese Fehler<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;API mit Python Datenbank verbinden&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/api-mit-python-datenbank-verbinden\"><a href=\"https:\/\/liora.io\/de\/api-mit-python-datenbank-verbinden\" target=\"_blank\" rel=\"noopener\">API mit Python Datenbank verbinden<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Webhooks in Python&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/webhooks-in-python-was-sind-sie-und-wie-kann-man-sie-mit-python-verwenden\"><a href=\"https:\/\/liora.io\/de\/webhooks-in-python-was-sind-sie-und-wie-kann-man-sie-mit-python-verwenden\" target=\"_blank\" rel=\"noopener\">Webhooks in Python<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Python f\u00fcr Fortgeschrittene&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/python-fuer-fortgeschrittene\"><a href=\"https:\/\/liora.io\/de\/python-fuer-fortgeschrittene\" target=\"_blank\" rel=\"noopener\">Python f\u00fcr Fortgeschrittene<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Matrix Implementierung Python&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/matrix-definition-und-implementierung-in-python\"><a href=\"https:\/\/liora.io\/de\/matrix-definition-und-implementierung-in-python\" target=\"_blank\" rel=\"noopener\">Matrix Implementierung Python<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Folium: Die Python Open-Source Bibliothek&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/folium-entdecke-die-open-source-bibliothek-von-python\"><a href=\"https:\/\/liora.io\/de\/folium-entdecke-die-open-source-bibliothek-von-python\" target=\"_blank\" rel=\"noopener\">Folium: Die Python Open-Source Bibliothek<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;E-Mail mit Python senden&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/e-mail-mit-python-senden-so-gehts\"><a href=\"https:\/\/liora.io\/de\/e-mail-mit-python-senden-so-gehts\" target=\"_blank\" rel=\"noopener\">E-Mail mit Python senden<\/a><\/td><\/tr><tr><td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Python HTTP Requests&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/python-http-request-requests-alles-wichtige\"><a href=\"https:\/\/liora.io\/de\/python-http-request-requests-alles-wichtige\" target=\"_blank\" rel=\"noopener\">Python HTTP Requests<\/a><\/td><\/tr><\/tbody><\/table>\t\t\n\t\t\t<h3>Unter welchen Umst\u00e4nden sollte man Threading nutzen?<\/h3>\t\t\n\t\t\t<style>\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2024\/02\/Python-Thread-Liora-1.jpg\" title=\"\" alt=\"\" loading=\"lazy\">\t\t\t\t\t\t\t\t\t\t\t<figcaption><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t<p>Hier sind einige Beispiele f\u00fcr Situationen, in denen Threading willkommen w\u00e4re.<\/p><ul><li>Eine Anwendung ben\u00f6tigt unabh\u00e4ngige Daten von mehreren Webseiten. Ohne Threading m\u00fcsste sie warten, bis der Download von einer Website abgeschlossen ist, bevor sie die n\u00e4chste starten k\u00f6nnte. Mit Threading kann sie diese Downloads gleichzeitig starten &#8211; sobald bei einem Download eine Wartezeit entsteht, \u00fcbergibt sie die Leitung an einen anderen.<\/li><li>Eine Anwendung ist so konzipiert, dass die vom Benutzer eingegebenen Informationen regelm\u00e4\u00dfig gespeichert werden. Wenn das Threading nicht genutzt wird, scheint die Anwendung beim Speichern der Daten &#8222;einzufrieren&#8220;. Wenn das Speichern durch einen separaten Thread erfolgt, wird die Anwendung weiterhin auf die Eingaben des Nutzers w\u00e4hrend des Speicherns reagieren.<\/li><li>Sobald ein Nutzer bestimmte Informationen eingegeben hat, z. B. die Parameter eines potenziellen Darlehens, muss eine Anwendung eine komplexe Datenanalyse durchf\u00fchren, die viel Rechenzeit in Anspruch nimmt.<\/li><li>Wenn du diese Operationen an einen separaten Thread delegierst, wird die Anwendung weiterhin die Interaktionen des Benutzers akzeptieren.<\/li><\/ul>\t\t\n\t\t\t<h3>Die Vorteile des Threadings<\/h3>\t\t\n\t\t\t<h4>Verbesserung der Leistung<\/h4>\t\t\n\t\t<p>Die Gesamtausf\u00fchrungszeit eines Programms wird beschleunigt, vor allem, wenn ein Programm potenzielle Wartezeiten erfordert, wie beim Lesen einer<strong> Datei und bei Webanfragen.<\/strong><\/p>\t\t\n\t\t\t<h4>Bessere Reaktion der App<\/h4>\t\t\n\t\t<p>Die Anwendung kann weiterhin auf Benutzeranfragen (wie Mausklicks) reagieren, w\u00e4hrend sie im Hintergrund andere Aufgaben erledigt.<\/p>\t\t\n\t\t\t<h4>Besserer Umgang mit festgefahrenen Situationen<\/h4>\t\t\n\t\t<p>Operationen, die die Ausf\u00fchrung des Codes blockieren k\u00f6nnten (wie das Warten auf eine Antwort des Netzwerks), f\u00fchren nicht zu einer blockierenden Situation: Der Rest des Programms l\u00e4uft normal weiter.<\/p>\t\t\n\t\t\t<h4>Ein klareres Design<\/h4>\t\t\n\t\t<p>Ein Programm, das in mehrere Threads aufgeteilt ist, hat in der Regel eine klarere Struktur.<a href=\"https:\/\/liora.io\/de\/webentwickler-werden-wie-wird-man-experte-fuer-die-erstellung-von-websites-und-anwendungen\"> Ein Entwickler, der in den Code eingreifen muss, kann die Logik leichter entschl\u00fcsseln.<\/a><\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Python-Threading beherrschen<\/a><\/div><\/div>\n\n\t\t\t<h3>Die Nachteile von Multithreading<\/h3>\t\t\n\t\t\t<h4>Potenziell komplexe Synchronisation<\/h4>\t\t\n\t\t<p>Wenn mehrere Threads die gleichen Daten \u00e4ndern k\u00f6nnen, ist es entscheidend, dass die Koordination kontrolliert gestaltet wird, was zu einer gewissen Komplexit\u00e4t der Entwicklung f\u00fchren kann.<\/p>\t\t\n\t\t\t<h4>Schwierige Fehlersuche<\/h4>\t\t\n\t\t<p>Threading kann zu Fehlern f\u00fchren, die schwer zu erkennen sind, da sie von der genauen Reihenfolge abh\u00e4ngen, in der die Threads ausgef\u00fchrt wurden.<\/p>\t\t\n\t\t\t<h4>Deadlock-Risiken<\/h4>\t\t\n\t\t<p>Ein Deadlock kann entstehen, wenn zwei Threads jeweils darauf warten, dass der andere eine bestimmte Ressource freigibt.<\/p>\t\t\n\t\t\t<h3>Multithreading vs multiprocessing<\/h3>\t\t\n\t\t<p>Wenn ein Programm mehrere Threads enth\u00e4lt, scheinen zwei oder mehr Aktionen parallel zu laufen. In Wirklichkeit ist dies bei Python nur eine Illusion.<\/p>\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2024\/02\/Python-Thread-Liora-2.jpg\" title=\"\" alt=\"\" loading=\"lazy\">\t\t\t\t\t\t\t\t\t\t\t<figcaption><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t<h4>GIL<\/h4>\t\t\n\t\t<p>Es gibt eine Situation in Python, die als <strong>GIL (Global Interpreter Lock)<\/strong> bezeichnet wird. Dies ist ein Mechanismus in Python, der daf\u00fcr sorgt, dass zu einem bestimmten Zeitpunkt nur ein Thread ausgef\u00fchrt wird.<\/p><p>Warum ein solcher Mechanismus? GIL wurde zu einer Zeit eingef\u00fchrt, als Multi-Core-Prozessoren noch nicht weit verbreitet waren. Nun teilen sich aber alle Threads denselben Speicher. GIL sorgte also daf\u00fcr, dass eine <a href=\"https:\/\/liora.io\/de\/csv-comma-separated-values-alles-ueber-dieses-zeitlose-format-fuer-tabellarische-dateien\">Datenstruktur<\/a> nur von einem Thread gleichzeitig ge\u00e4ndert werden konnte. Dieser Mechanismus sorgte f\u00fcr Sicherheit bei der Speicherverwaltung, schr\u00e4nkte aber die F\u00e4higkeit von Python ein, Threads wirklich parallel auf mehreren Prozessorkernen auszuf\u00fchren.<\/p>\t\t\n\t\t\t<h4>Nur ein Thread gleichzeitig<\/h4>\t\t\n\t\t<p>Im Zusammenhang mit <strong>Python<\/strong> spricht man eher von &#8222;Konkurrenz&#8220; als von &#8222;Parallelit\u00e4t&#8220;. Was ist der Unterschied?<\/p><p>Im Kontext der Konkurrenz werden zu einem bestimmten Zeitpunkt eine oder mehrere Anweisungen eines bestimmten Threads aktiv sein. Mit anderen Worten: Jeder Thread wird zu einem bestimmten Zeitpunkt alleine arbeiten, und je nach den Umst\u00e4nden wird dem einen oder anderen Thread Priorit\u00e4t einger\u00e4umt. Auf diese Weise schreitet der<strong> Code jedes Threads stetig voran und es entsteht der Eindruck einer parallelen Ausf\u00fchrung.<\/strong><br>Im Kontext der Parallelit\u00e4t werden tats\u00e4chlich mehrere Prozesse gleichzeitig ausgef\u00fchrt. Und jeder dieser Prozesse hat seinen eigenen Speicher.<\/p><p>Daher unterscheidet sich<strong> Multithreading von Multiprocessing.<\/strong><\/p><p>Was l\u00e4sst sich daraus schlie\u00dfen? Dass Threading f\u00fcr unabh\u00e4ngige Aufgaben mit Wartezeiten (z. B. ein Klick des Benutzers) effektiv ist und Multiprocessing besser geeignet ist, wenn rechenintensive Aufgaben parallel laufen k\u00f6nnen.<\/p>\t\t\n\t\t\t\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/weiterbildung-data-scientist\">Python lernen<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Mehrere Aufgaben gleichzeitig auszuf\u00fchren scheint eine unleugbare Quelle der Einsparung bei der Ausf\u00fchrung von Programmen zu sein. Python bietet daf\u00fcr eine L\u00f6sung, die als &#8222;Threading&#8220; bezeichnet wird. Threading ist jedoch komplexer, als es auf den ersten Blick scheint, und seine Beherrschung erfordert eine gr\u00fcndliche Analyse der von einem Programm erwarteten Funktionen. Au\u00dferdem f\u00fchrt der Threading-Mechanismus [&hellip;]<\/p>\n","protected":false},"author":78,"featured_media":192922,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-192920","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/192920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=192920"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/192920\/revisions"}],"predecessor-version":[{"id":216954,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/192920\/revisions\/216954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/192922"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=192920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=192920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}