Seite 1 von 1

von python auf shared Memory zugreifen

Verfasst: Freitag 25. Februar 2011, 15:07
von ignis-draco
Hi

ich habe folgendes kleines Problem :

Ein Programm befüllt ein shared Memory mit Daten die in Form eines c struc gespeichert werden.
Diese Daten hätte ich gerne in Python. Ich bekomme die daten eingelesen mit

with open(datenpfad,"r+b")as f:
map = mmap.mmap(f.fileno(),0)

Gibt es eine Möglichkeit dann sinnvoll auf die Daten zu zugraifen ?
ich meine ohne Byte gefrickel ?

Ich habe schon mittel ctypes das C struc nachgebaut nur leider weiss ich nicht wie ich das casten kann. Geht das überhaupt ?
Oder ist es besser wenn ich mir eine .so datei baue und dann nur c Funktionen aufrufen muss ?


Habt bitte etwas nachsicht mit mir ich beschäftige mich erst seit dieser Woche mit Python.
Ach ja bevor ich es vergesse ich arbeite unter Linux mit Python 3.1.

Danke für die Hilfe schon mal im foraus.

Re: von python auf shared Memory zugreifen

Verfasst: Freitag 25. Februar 2011, 16:17
von BlackJack
@ignis-draco: So ein `mmap`-Objekt implementiert das `buffer`-Protokoll, dass heisst man kann die `from_buffer()`-Methode von `ctypes`' Typ-Objekten verwenden:

Code: Alles auswählen

In [44]: class Point(ctypes.Structure):
   ....:     _fields_ = [
   ....:        ('x', ctypes.c_int16),
   ....:        ('y', ctypes.c_int16)
   ....:     ]
   ....: 

In [45]: a
Out[45]: <mmap.mmap object at 0x9220940>

In [46]: a[0:4]
Out[46]: '\x00\x00\x00\x00'

In [47]: p = Point.from_buffer(a)

In [48]: p.x
Out[48]: 0

In [49]: p.y
Out[49]: 0

In [50]: p.x = -1

In [51]: p.y = 42

In [52]: a[0:4]
Out[52]: '\xff\xff*\x00'

Re: von python auf shared Memory zugreifen

Verfasst: Sonntag 27. Februar 2011, 12:30
von ignis-draco
Vielen dank werde das Morgen gleich mal ausprobieren.
Genau da nach habe ich gesucht.