Mehrere Anfängerfragen

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.
Antworten
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Schönen guten Tag,

Ich habe noch Probleme einige Sachen zu verstehen:


1.) Unnötige else blöcke:

In ganzen vielen Tutorials wird oftmals ein else Blöck benötigt dessen sind Ich nicht ganz verstehe ?

Beispiel:

Code: Alles auswählen

if datei.exist():
	return datei
else:
	datei.mkdir()
	return datei
Wieso sieht man das so oft in dem Fall kann Ich das Else doch weglassen und einfach nur datei.mkdir() return datei schreiben?



2.) Try/Except:
Hier in dem Forum wurde mir erklärt das man es dort einsetzt wo es sind macht als Beispiel habe Ich eine Funktion die eine Datei öffnet dann würde es aus meiner Sicht Sinn machen den Try/Except Block in die Funktion zu schreiben.... mir wurde aber auch schon mal gesagt Ich soll auch immer ein Try/ Except Block in meiner Main Funktion haben nur Ich verstehe nicht wofür wenn Ich doch schon in der Funktion versuche den Abzufangen ??? Wieso sollte Ich den Fehler dann wieder hoch in die main Funktion werfen macht für mich kein Sinn ???


3.)Mehrere Skripte laufen lassen:

Hier steige Ich leider nicht ganz durch Ich habe nun so viele Antworten dazu gehört mal angenommen Ich möchte mehrere Messungen parallel laufen lassen was wäre hier das beste :

Antwort 1 : Man lässt einfach aus einem Bash Skript Programm1 & Programm2 laufen ???

Antwort 2: Concurrent.futures darüber kann Ich Pools erstellen ( Prozess sowie Threads) wenn Ich das richtig verstanden habe ist es hier so das Threads die Vorteile und "kommunizieren können" -> (globale Variablen) tauschen sag Ich mal während Prozesse das nicht untereinander können .Mehrere Threads können in einem Prozess ausgeführt werden (was mir am sinnvollsten bei Aufgabenstellung erscheint) man sollte Prozesse nur benutzten wenn es um komplexere Berechnungen gehen soll (hier wären in dem fall mehrere Prozesse schneller)

Ich verstehe nur nicht wenn es Concurrent.futures gibt wieso gibt es dann nochmal Threading und Multiprocessing sind diese veraltet und sollte man meiden ?

Ich danke euch schon mal
Eine Vision ohne Aktion bleibe eine Illusion
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zu 1: das ist einfach schlecht programmiert. Keine Ahnung wo du sowas siehst, aber da das Internet voll mit Sch...se ist, ist das eben auch ein Fall davon. Such dir bessere Quellen, zB hier oder StackOverflow *Antworten*. Nicht Fragen. Die sind ja von Leuten, die Fragen haben.

Code: Alles auswählen

if not folder.exists():
    folder.mkdir()
return folder
Der Name datei ist auch Mist, weil es natuerlich keine Datei ist. Es ist ein Ordner. Das sollte der Variablenname auch reflektieren.

Zu 2: wer sagt denn, dass du *immer* einen try/except-Block in der main haben sollst? Hier bestimmt niemand.

Zu 3: Kommunikation ueber globale Variablen als Vorteil zu beschreiben ist auch schon wieder so ein grober Unfug. Hast du hier auch nur 3 Antworten gelesen? Da kam garantiert drin vor, dass man *KEINE* globalen Variablen benutzt. Hier, zB, in einer Antwort an dich: viewtopic.php?f=30&t=49835#p374350

Der Vorteil von Threads ist tatsaechlich, dass sie im gleichen Prozessraum sind, und darum kann man einfacher Daten mit denen teilen, vor allem auch Daten, die nicht serialisierbar sein muessen. Aber globale Variablen benutzt man dazu trotzdem nicht.

Und nicht alles, was man parallelisieren kann und will, ist mit der API von Futures vernuenftig erreichbar. Darum gibt es sowohl die simpleren Bausteine wie Threads, als auch fortgeschrittenere Abstraktionen.
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

erstmal danke __deets__

Der Hinweis mit dem Try/except habe Ich aus einer Facebookgruppe erhalten also würdest du das auch auf Funktiontsebene lösen?

Zu 3 Ich arbeite meistens micht einem Buch https://openbook.rheinwerk-verlag.de/py ... ml#u32.1.1 -> " Der Vorteil von Threads gegenüber Prozessen besteht darin, dass sich die Threads eines Prozesses denselben Speicherbereich für globale Variablen teilen. Wenn also in einem Thread eine globale Variable verändert wird, ist der neue Wert auch sofort für alle anderen Threads des Prozesses sichtbar[ 127 ](Um Fehler zu vermeiden, müssen solche Zugriffe in mehreren Threads speziell mit sogenannten Critical Sections abgesichert werden." Ich weiß das hier immer alle sagen man soll das lassen.

Wie würdest du den das Problem mit der Messung lösen wenn du mehrere Messungen machen möchtest -> auch einfach mehrere Skripte laufen lassen oder als Prozess -> da die Messwerte untereinandere nicht kommunizieren müssen.
Eine Vision ohne Aktion bleibe eine Illusion
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Bl3nder

Ausnahmebehandlung macht man dort, wo man die Ausnahme sinnvoll behandeln kann. Das kann direkt am untersten Funktionsaufruf selbst sein, wenn man dort eine sinnvolle Alternative bereitstellen kann. Oder in selten Fällen auch mal gar keine Behandlung, dann dröppelt die Ausnahme eben bis __main__ hoch und Python antwortet mit seinem Standardhandler (stacktrace & exit).
Es ist definitiv ein Fehler, dass zwanghaft immer auf unterster Ebene machen zu wollen, da es Fehler maskiert und oft zu "Weiss nicht warum das nicht geht" Konstellationen führt.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn das so in dem Buch steht, dann ist das Mist. Das ist zwar technisch richtig, aber die Probleme mit globalen Variablen sind schon ohne Nebenlaeufigkeit schlimm genug. Wenn man dann noch Threads reinruehrt, wird es vollends Wahnsinn.

Und "das Problem mit paralleler Messung" ist ein bisschen zu breit, um da eine konkrete Antwort drauf zu geben. Tendentiell wuerde ich aber alles in einem Programm machen, statt einen Zoo von Scripten gleichzeitig zu starten.
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Ok dann danke Ich euch erstmal und werde dann das Programm mal in den nächsten Tagen hochladen
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
__blackjack__
User
Beiträge: 13073
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bl3nder: Ad 1) Es wurde ja schon der Code ohne ``else`` gezeigt. Im konkreten Fall ginge der auch noch ohne ``if``:

Code: Alles auswählen

    path.mkdir(exist_ok=True)
    return path
Ad 2) Das ``except:`` würde in der Funktion, welche die Datei öffnet, Sinn machen, wenn die damit dann auch sinnvoll umgehen kann, falls das nicht funktioniert. Sollte sie nicht sinnvoll damit umgehen können, sollte sich jemand in der Aufrufhierarchie weiter oben darum kümmern, der eine sinnvolle Behandlung durchführen kann.

Das kann dann im Extremfall auch Python selbt sein, dass als Behandlung die Ausnahme plus Traceback ausgibt und das Programm beendet. Falls man Logging in irgendeiner Art betreibt, ist da dann in der `main()` normalerweise der Punkt wo man als letzte Tat alle Ausnahmen behandelt, in dem man sie protokolliert, bevor man entweder das Programm beendet oder die Ausnahme erneut auslöst.

Ad 3) Das Buch ist da ungenau bis falsch. Threads teilen sich nicht nur globale Variablen, die haben insgesamt den gleichen Adressraum/Speicher.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

@ Ich danke dir __blackjack__ für die weiteren Hinweise :)
Eine Vision ohne Aktion bleibe eine Illusion
Antworten