Geschwindigkeit des Importierens optimieren, Modulpfad setze

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 10. Juli 2007, 22:36

Kannst du nicht das jeweilige setzen der Umgebungsvariablen beim Start des Systems setzen?

Tut mir leid, ich bin zu muede um das jetzt auszuschluesseln und da ich nicht weiß wie genau das Linux-System auf einem Foxboard aussieht, moechte ich mich auch nicht ans Raten wagen.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 10. Juli 2007, 23:21

Inmare hat geschrieben:'import site failed'
Hallo Inmare!

"site.py" ist fixer Bestandteil von Python. Dieses Modul wird bei jedem Aufruf von Python automatisch importiert. Es ist für die Säuberung und Erweiterung des Pythonpfades und noch so einigen Dingen zuständig.

Ich mutmaße: Wenn "site.py" nicht importiert werden kann, dann hat das, speziell für Foxboard kompilierte, Python ein Problem. Vielleicht muss man vor dem Kompilieren von Python doch noch irgend einen Pfad richtig setzen. "cgi.py" liegt im gleichen Ordner wie "site.py".

Info: http://docs.python.org/lib/module-site.html

Wie stehts mit den Schreibrechten für diese Python-Ordner aus? Sind alle *.pyc- und *.pyo-Dateien für die Module erstellt? Wenn nicht -- und wenn das Schreibrecht für diese Ordner fehlt, dann könnte es eventuell Probleme geben.

Vielleicht hilft ein allgemeines Kompilieren aller Module des Python-Ordners. --> http://docs.python.org/lib/module-compileall.html

Da fällt mir noch ein: "site.py" bereinigt den Python-Pfad. Es schmeißt also alle überflüssigen Ordner, Zip-File-Pfade usw. aus dem Pfad raus. Ich kann mir schon vorstellen, dass es viel Zeit braucht, die falschen Ordner zu durchsuchen und -- jetzt kommt's -- nicht vorhandene Zip-Files zu öffnen. Auch wenn es in Python üblich ist, auf Fehler zu reagieren. Eine Exeption abzufangen braucht viel mehr Zeit als einmal vorher zu prüfen ob eine Datei existiert oder nicht.

Versuche doch mal in deinem Programm zuallererst das Modul "site" zu importieren. Vielleicht werden die darauf folgenden Module dadurch schneller importiert. Rein theoretisch sollte nach dem Importieren von "site" der Python-Pfad bereinigt sein. Falls sich "site" nicht importieren lässt, dann kopiere dieses Modul in deinen Anwendungsordner. Und wenn es dann immer noch nicht funktioniert, dann füge den Pfad zum Ordner an den Anfang des Pythonpfades hinzu. (Vielleicht ist es besser, den Eintrag "" an erster Stelle zu lassen. Füge den Pfad besser mit ``sys.path.insert(1, "pfad")`` hinzu.)

Mich würde echt interessieren, ob das etwas bringt.

Mehr fällt mir im Moment nicht ein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 11. Juli 2007, 12:11

Nur so eine Idee: Vielleicht würde es was bringen, eine eigene "site.py" Datei zu machen. Diese prüft nicht die Ordner, sondern dort werden einfach die Ordner fest vorgegeben. Das müsste um einiges schneller gehen, ist allerdings auch unflexibler...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Inmare
User
Beiträge: 9
Registriert: Montag 9. Juli 2007, 12:41

Montag 16. Juli 2007, 16:38

Danke für die Hilfebemühungen, ich weiß das wirklich zu schätzen.

Mittelfristig wird es wwohl eine Lösung wie CherryPy werden müssen, vielleicht auch ein Rich Client (was ja auch Java-Applet, Flash, AJAX bedeuten könnte; die Auslieferung statischer Inhalte ist ja unproblematisch).
birkenfeld hat geschrieben:
jens hat geschrieben:Ersetzte dazu den Header wie z.B.:

Code: Alles auswählen

#!/usr/bin/env python
durch

Code: Alles auswählen

#!/usr/bin/env python -OO
Das funktioniert so nicht; im Shebang ist genau ein Argument erlaubt.
Hm, ich rufe ja den Interpreter direkt auf, da hat das -OO als einziges Argument dann doch seine Wirkung? Ansonsten geht nichts über einen schönen Placeboeffekt. :-)
nkoehring hat geschrieben:Kannst du nicht das jeweilige setzen der Umgebungsvariablen beim Start des Systems setzen?
Werden sie ja, sie kommen nur nicht an, auch wenn alles als root läuft. Vielleicht eine thttpd-Eigenart? Ist ja auch nicht mehr das am besten gepflegte Stück Software...
gerold hat geschrieben: Ich mutmaße: Wenn "site.py" nicht importiert werden kann, dann hat das, speziell für Foxboard kompilierte, Python ein Problem. Vielleicht muss man vor dem Kompilieren von Python doch noch irgend einen Pfad richtig setzen. "cgi.py" liegt im gleichen Ordner wie "site.py".
cgi (und die Importe aller anderen Bibliotheken) werden ja auch nur gefunden, wenn ich den Pfad explizit setze. site.py wird ja wohl direkt beim Interpreterstart aufgerufen, bevor ich die Pfade beeinflussen kann. Na ja, werde ich mal ein site.py in das Web-Verzeichnis legen.
Wie stehts mit den Schreibrechten für diese Python-Ordner aus? Sind alle *.pyc- und *.pyo-Dateien für die Module erstellt? Wenn nicht -- und wenn das Schreibrecht für diese Ordner fehlt, dann könnte es eventuell Probleme geben.

Vielleicht hilft ein allgemeines Kompilieren aller Module des Python-Ordners. --> http://docs.python.org/lib/module-compileall.html
Schreibrechte sind gegeben, die Dateien (abgesehen von den direkt aufgerufenen) werden kompiliert und auch gespeichert.

Am Rest bastele ich noch herum.

Danke.
Antworten