Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo, ich stehe gerade vor einen Rätsel, also ich möchte genau gesagt wenn eine "while 1" Schleife läuft in einen Script aber schon die nächste ausführen.
Das Modul_x beinhaltet auch eine "while 1" Schleife.
Mein schema:
import Modul_x
Modul_x.start()
while 1:
anweisung 2
Kann man während Modul_x läuft schon das nächste ausführen? Ich habe es bis jetzt leider nicht geschafft.
Und dann habe ich festgestellt, wenn ich ein Modul importiere, das es sich beim Aufruf sich ausführt, schon ausführt wenn ich es importiere.
Warum ist das so?
Diese Frage laesst sich so allgemein nicht beantworten. Nebenlaeufige Programmierung ist ein weites Feld, und was man da wie macht haengt stark von der konkreten Aufgabe ab.
Und wenn du entgegen dem, was hier immer gepredigt wird, zB von __blackjack__, ausfuehrbaren Code auf Modulebene hast, statt nur konstanten, Funktions und Klassendefinitionen - ja, dann wird das schon beim import ausgefuehrt.
@egon11: Das `thread`-Modul ist nicht das wahre, das gibt's in Python 3 auch nicht mehr, weil man schon seit einer Ewigkeit auch in Python 2 schon das `threading`-Modul verwenden sollte. Threading grundsätzlich würde aber voraussetzen, das die Bibliothek/der Code den Du verwendest um die Hardware anzusprechen „thread safe“ ist. Wenn das nicht irgendwo deutlich steht, das Du zwei verschiedene LEDs auf unterschiedlichen Threads schalten darfst, wäre ich da skeptisch. Das Problem bei Fehlern bei Threadprogrammierung ist das man das nicht einfach ausprobieren kann. So ein Programm kann trotz Fehler ”funktionieren”. Bis es das dann mal nicht mehr tut.
Dein Beispielcode ist falsch, weil `start_new_thread()` ein Aufrufbares Objekt erwartet, und zumindest `schleife1()` nichts aufrufbares zurück gibt. Und ich vermute mal `Modul_x.start()` tut das ebenfalls nicht. Wenn man das richtig machen würde, stellt sich als nächstes die Frage was Du denkst was passiert wenn man zwei zusätzliche Threads startet und der Hauptthread dann am Ende angekommen ist. Falls Du das aus einer IDE heraus startest, solltest Du das dringend auch mal ohne IDE versuchen. Das verhält sich in solchen Fällen gerne mal anders.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
So jetzt habe ich es mal getestet, es scheint genau das richtige zu sein.
Hier mal ein kleines Script, was 2 dauer while-Schleifen durchläuft.
Sobald bei der Funktion die "probe2()" die datei.txt vorhanden ist gibt es mir auch das entsprechende aus.
Hier mal mein Code für euch Profis ob das so ok ist:
Wenn das durch das kopieren zu Stande gekommen ist, dann deutet das immer noch darauf hin, dass dein Editor schlecht konfiguriert ist. Denn dann hast du mal Tabs und mal Spaces gemischt. Das solltest du dringend abstellen, sonst bekommst du da mal probleme.
Und die Benennung mit durchnummerierten Funktionen, und a und b, ist halt auch schlecht. Kann keiner verstehen. Und keiner bist auch du in wenigen Wochen oder Tagen, wenn du wieder auf deinen eigenen Code schaust.
Ich ich habe mir angewöhnt immer mit Tabs bei den Einrückungen zu arbeiten, pro Einrückung 1 Tab.
Wenn ich "richtige" Scripte schreibe, dann benenne ich sie auch anders, das war jetzt bloß ein kurzes Beispiel.
Vielen dank für die Hinweise.
technisch, also für den Python Interpreter, ist es egal. Aber die PEP8, also der heilige Gral des Stils der Python-Programmierung, empfiehlt klar vier Leerzeichen: https://www.python.org/dev/peps/pep-0008/#indentation
Man kann übrigens so gut wie jeden Editor so einstellen, dass bei Druck auf die Tab-Taste vier Leerzeichen eingefügt werden (statt ein Tab).
Der Grund ist ganz einfach: du als Mensch siehst nicht, ob etwas Leerzeichen oder Tabs sind. Der Interpreter aber sehr wohl. Und wenn etwas SICHTBAR 8 Leerzeichen eingerueckt ist als Block, kann es trotzdem eine Mischung aus 8 Leerzeichen und 1 oder 2 Tabs sein. Oder 4. Oder 8. Je nachdem, wie weit du den Tababstand eingestellt hast. Und damit ist trotz visueller Kongruenz aus Sicht des Python-Interpreters keine Entschedung darueber faellbar, ob die Zeilen zu einem Block gehoeren sollen oder nicht. Und dann kracht es. Mischen von Tabs und Leerzeichen ist also schonmal Mist.
Und weil wie schon gesagt Tabs so unterschiedlich dargestellt werden koennen, und der Code dann ploetzlich ganz anders aussieht, weil jemand da dran rumgedreht hat - da hat man dann empfohlen, 4 Spaces zu benutzen.