threading und import

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
gNeandr
User
Beiträge: 68
Registriert: Sonntag 11. Mai 2014, 16:48

Im Moment hatte ich zwei py Programme, die ich mit "python funct1.py" und "python funct2.py" starte.

Da funct2 im Prinzip eine Funktionserweiterung zu funct1 ist, liegt es nahe diese mit einem Thread innerhalb von funct1 zu starten. Eigentlich funtionoiert das auch ganz gut.

Allerdings habe ich für beide funct1/2 viele import Anweisungen "doppelt" (zB: import json). Deshalb versuchte ich diese doppelten in funct2 wegzulassen. Was zu Fehlern führt.

Kann mir jemand sagen, wo ich mich am besten schlau machen kann ob/bzw wie ich dafür vorgehen sollte. Oder muss ich die import Anweisungen in jedem Fall auch in funct2 haben?
Ich vermute ja fast, dass für "jeden" Thread die import Anweisung separat gemacht werden müssen! Richtig? :?:
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gNeandr hat geschrieben:Ich vermute ja fast, dass für "jeden" Thread die import Anweisung separat gemacht werden müssen! Richtig? :?:
Das hat nicht einmal etwas mit Threads zu tun. Wenn du in einem Python-Script Module verwendest, dann musst du sie dort auch importieren.
gNeandr
User
Beiträge: 68
Registriert: Sonntag 11. Mai 2014, 16:48

/me hat geschrieben: Das hat nicht einmal etwas mit Threads zu tun. Wenn du in einem Python-Script Module verwendest, dann musst du sie dort auch importieren.
Ok, knapp daneben. Aber das Module ihre eigenen import's brauchen ist verständlich. Ich hätte mir gewünscht es gäbe eine "übergeordnete" import Methode. Aber vlt. ist dieser Weg "sauberer".

Danke jedenfalls :)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ein import in Python ist halt nicht das gleiche wie ein include in PHP. Das include kopiert wirklich den Code an die angegebene Stelle, das import erstellt eine Referenz in der internen Symboltabelle.
BlackJack

@gNeandr: Der Weg ist sauberer, ohne Anführungsstriche. Erstens sieht man so welche Namen woher kommen, also wo man nach Dokumentation oder Definitionen suchen muss, und was sollte denn passieren wenn man zwei Module hat die den gleichen Namen definieren, welcher wäre denn dann ”übergeordnet” verfügbar? Auf diese Weise könnte ein Import irgendwo im Programm Code irgendwo ganz anders beeinflussen und kaputt machen weil der mit oder ohne den Import für einen Namen den er verwendet jeweils eine andere Definition dafür hat.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@gNeandr:
Importe in Python sind interpreterglobal, heisst ein `import bla` in verschiedenen Modulen zeigt standardmässig auf dieselbe Ressource. Zusätzlich sind Importe "Singletons", heisst ein späteres `import bla` lädt die Ressource nicht neu. Das entspricht in etwa einem "übergeordneten" Importmechanismus, nur das er vor Dir versteckt wird. Mit Threads in Python hat das alles nichts zu tun, diese laufen ja innerhalb desselben Interpreters.
Antworten