Mit Python in Speicher schreiben?

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.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Hallo,

im deutschen Blender-Forum blendpolis.de ist heute die Frage aktuell, ob man über Python-Scripte in den Arbeitsspeicher schreiben und auch daraus lesen kann.
Es geht darum, schnelleren Zugriff auf erhaltenswerte Daten wärend der Laufzeit zu erhalten und Daten zwischen zu speichern.
Gibt es dazu Kenntnisse?
Ist dieser Beitrag in der richtigen Kategorie?
Wenn nicht, nicht böse sein und bitte verschieben.

Der Link zum Beitrag bei Blendpolis.de:
http://blendpolis.de/f/viewtopic.php?p=190290#190290

Es wäre schön, wenn sowas gehen könnte. Aber wie?

MfG dieter1a
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:Es wäre schön, wenn sowas gehen könnte. Aber wie?
Direkt in Speicher schrieben: nein. Braucht auch in der Regel niemand. Indirekt wird es wohl über ctypes gehen,ist aber auch nicht so der Hit.


Wenn ihr Daten zwischen Prozessen austauschen wollt, dann solltet ihr eher RPC verwenden und wenn das zu langsam ist, dann vielleicht das Konzept des Tuple space ausprobieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
abgdf

Hi,

man kann Python-Module in C schreiben. Damit dürfte das gehen. Ein Beispiel aus einer Zeitschrift, wie man sowas macht, habe ich auf meine Seite gestellt (weil der Zeitschriftenartikel nicht mehr im Internet war):

http://www.angelfire.com/linux/tux25/python.html#21

Dürfte aber nicht ganz einfach werden, aber .... im Prinzip sollte es möglich sein.

Viele Grüße
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Danke Leonidas,

ich weiß jetzt nicht ob Du Dir den Beitrag bei blendpolis angeschaut hast.
Im Prinzip geht es darum, Vektordaten kurzfristig zu speichern und bei Bedarf darauf zuzugreifen.
Klar gibt es die Möglichkeit der Verwendung von globalen Variablen und die Verwendung von Textdateien.
Aber da das Tema auf den Tisch kam, dachte ich, frag doch mal bei den Spezialisten nach.
In meinem 3dpowertower.de habe ich das mit einer Datenbank gelöst, was aber eine nicht unerhebliche Zeitverzögerung mit sich bringt.
(normal sollte man die Standorte der Besucher in Echtzeit sehen können)

Apropo, mit Python kann ich doch meines Wissens auch direkt auf einen Server mit einer Datenbank zugreifen. Oder?
Ich habe das mit einem Director-Film gelöst, der über Textdateien mit dem Blender.exe-Projekt kommuniziert.
Geht das eventuell auch einfacher?
Das wäre ja der absolute 'HAMMER'.
Ich bräuchte erstmal keinen Browseraufruf, sondern einfach die Anfrage an einen URL, sprich xyz.php und natürlich die Rückgabe.
Geht sowas?
Gibts dafür Beispiele oder Tutorials?

Wäre ja auch eine Lösung des Zwischenspeicherns von Vectordaten ohne Inanspruchname von Game Engine belastenden Methoden.

Danke für Hilfen

MfG dieter1a
abgdf

Apropos, mit Python kann ich doch meines Wissens auch direkt auf einen Server mit einer Datenbank zugreifen. Oder?
Jaa, hab ich bzgl. MySQL ebenfalls auf meiner Seite :P:

http://www.angelfire.com/linux/tux25/python.html#15

Viele Grüße
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Danke,

leider kann ich die Seite nicht öffnen, weil ich die ca 1000 Cookies abgelehnt habe.

MfG dieter1a
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:ich weiß jetzt nicht ob Du Dir den Beitrag bei blendpolis angeschaut hast.
Ja. Habe dann später auch die Links gesehen, wo jemand ctypes vorgeschlagen hat ;)
dieter1a hat geschrieben:Im Prinzip geht es darum, Vektordaten kurzfristig zu speichern und bei Bedarf darauf zuzugreifen.
Klar gibt es die Möglichkeit der Verwendung von globalen Variablen und die Verwendung von Textdateien.
Textdateien ist insofern recht uninteressant, da sie Disk-IO verursachen. Das ist aus Programmierer-Sicht total langweilig und verschwendet unnötig Resourcen (File Descriptors etc.).
dieter1a hat geschrieben:Apropo, mit Python kann ich doch meines Wissens auch direkt auf einen Server mit einer Datenbank zugreifen. Oder?
Naja, was heißt direkt? So "direkt" wie es auch mit anderen Sprachen wie PHP, Ruby etc. geht.
dieter1a hat geschrieben:Ich habe das mit einem Director-Film gelöst, der über Textdateien mit dem Blender.exe-Projekt kommuniziert.
Geht das eventuell auch einfacher?
Das wäre ja der absolute 'HAMMER'.
Ich bräuchte erstmal keinen Browseraufruf, sondern einfach die Anfrage an einen URL, sprich xyz.php und natürlich die Rückgabe.
Geht sowas?
Gibts dafür Beispiele oder Tutorials?
Ich komme hier grad nicht mit - kann es sein dass sich die Fragestellung verändert hat?
dieter1a hat geschrieben:Wäre ja auch eine Lösung des Zwischenspeicherns von Vectordaten ohne Inanspruchname von Game Engine belastenden Methoden.
Um Vektordaten zwischenzuspeichern müsste sich ein solcher von mir vorgeschlagener Tuple space eignen. Aber simpler noch ist ein Remote-Procedure-Call.Das heißt,dass du etwa einen XML-RPC Server hast und dieser die Vektordaten speichert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

dieter1a hat geschrieben:Ich habe das mit einem Director-Film gelöst, der über Textdateien mit dem Blender.exe-Projekt kommuniziert.
Geht das eventuell auch einfacher?
Das wäre ja der absolute 'HAMMER'.
Ich bräuchte erstmal keinen Browseraufruf, sondern einfach die Anfrage an einen URL, sprich xyz.php und natürlich die Rückgabe.
Geht sowas?
Gibts dafür Beispiele oder Tutorials?
Ich komme hier grad nicht mit - kann es sein dass sich die Fragestellung verändert hat?

Hier benutze ich Director als comunication-Tool, was zwischen Server und Blender.exe via Textdateien die Daten hin und her schaufelt. :wink:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:Hier benutze ich Director als comunication-Tool, was zwischen Server und Blender.exe via Textdateien die Daten hin und her schaufelt. :wink:
Naja, das kannst du auch mit Python machen, wenn die Datenbank mitspielt. Hängt eben ab, was das für eine ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

MySQL
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na dann kannst du sie einfach via ``MySQLdb``-Modul ansprechen. Musst du natürlich installiert haben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
abgdf

leider kann ich die Seite nicht öffnen, weil ich die ca 1000 Cookies abgelehnt habe.
Mach doch mal bitte für einen Moment JavaScript aus. Dann kannst Du sie problemlos anschauen / speichern.

Viele Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

abgdf hat geschrieben:Mach doch mal bitte für einen Moment JavaScript aus. Dann kannst Du sie problemlos anschauen / speichern.
Den MySQL-Code würde man eher so schreiben:

Code: Alles auswählen

while True:
    row = cursor.fetchone()
    if not row:
         break
    print row
Davon abgesehen gibt es auch ``cursor.fetchmany()`` was in diesem Fall angebrachter wäre.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Leonidas hat geschrieben:Na dann kannst du sie einfach via ``MySQLdb``-Modul ansprechen. Musst du natürlich installiert haben.
Du hast bedacht, dass die Datenbank im Internet und nicht auf dem eigenen Rechner liegt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:Du hast bedacht, dass die Datenbank im Internet und nicht auf dem eigenen Rechner liegt?
Solange die Datenbank von außen ansprechbar ist, ist das kein Problem. Ist aber in der Regel nicht so einfach möglich. Aber das hast du auch nicht gesagt, dass die Datenbank nicht lokal ist.

Aber auch da gäbe es Mittel und Wege.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

dieter1a hat geschrieben:Ich bräuchte erstmal keinen Browseraufruf, sondern einfach die Anfrage an einen URL, sprich xyz.php und natürlich die Rückgabe.
Geht sowas?
Gibts dafür Beispiele oder Tutorials?

Wäre ja auch eine Lösung des Zwischenspeicherns von Vectordaten ohne Inanspruchname von Game Engine belastenden Methoden.
Habe mich hier wohl nicht deutlich genug ausgedrückt. Sorry :oops:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Stellen wir mal das Grunddesign fest (damit es auch für nicht-Blender-User wie mich klar ist).
  • Du hast eine Blender-Anwendung die Daten zwischenspeichern muss.
  • Du kannst aus Blender heraus Python nutzen.
  • Du möchtest nicht in Textdateien zwischenspeichern, weil das zu langsam ist und zu viel Disk-IO hervorruft.
  • Also kannst du einen anderen Python-Prozess starten, der die Daten bereit hält und der per XML-RPC die Daten an den Python-Prozess aus Blender zurückgibt
Wenn ich irgendwelche Punkte falsch verstanden habe oder ausgelassen habe, dann bitte ergänzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Leonidas hat geschrieben:
  • Du hast eine Blender-Anwendung die Daten zwischenspeichern muss.
Richtig.
Leonidas hat geschrieben:
  • Du kannst aus Blender heraus Python nutzen.
Richtig.
Leonidas hat geschrieben:
  • Du möchtest nicht in Textdateien zwischenspeichern, weil das zu langsam ist und zu viel Disk-IO hervorruft.
Richtig.
Leonidas hat geschrieben:
  • Also kannst du einen anderen Python-Prozess starten, der die Daten bereit hält und der per XML-RPC die Daten an den Python-Prozess aus Blender zurückgibt
Genau das weiß ich nicht.
Python ist die Script-Sprache in Blender, mit der sich das gesamte Verhalten der Echtzeit-Animation steuern lässt.
Wie ich nun einen URL anspreche und Daten zurück bekomme weiß ich nicht.
Darum habe ich auch den Weg über ein Director-Movie gewählt, welches in der Lage ist einen Server im Netz über einen URL anzusprechen, Rückgabewerte in eine .txt zu schreiben und die Animation ist in der Lage diese .txt zu lesen und sie zu beschreiben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:Wie ich nun einen URL anspreche und Daten zurück bekomme weiß ich nicht.
Na also! Wenn das alles ist:

Code: Alles auswählen

import urllib
remote_file = urllib.urlopen('http://dein.server.vielleicht.mit.sinnloser.berlin/tld/und.deiner.datei.txt')
remote_file_contents = remote_file.read()
remote_file.close()
Lässt sich mit Python 2.5 noch möglicherweise etwas eleganter mit dem ``with``-Statement machen.

(Was das ``with``-Statement angeht muss ich ehrlich sagen, dass es zwar einiges bietet, aber nicht wirklich elegant ausschaut).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Ich bin erstaunt, platt und sehr dankbar Leonidas.

Werde mich gleich morgen damit auseinander setzen und testen was dabei heraus kommt.
Wenn`s Fragen gibt, darf ich mich doch wieder hier melden? :D

Vielen Dank

dieter1a
Antworten