python und c semaphore

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
ignis-draco
User
Beiträge: 15
Registriert: Freitag 25. Februar 2011, 12:33

Hi

Nach dem ich dank euch das Problem mit dem Shard Memory gelöst habe (danke noch mal).
Komme ich jetzt mit den Semaphoren nicht weiter.

Ich habe ein C struc das in dem Shard Memory gespeichert wird es enthält zwei Semaphoren.
C code:
#include <semaphore.h>
typedef struct {
sem_t semforode;
sem_t semformatlab;
....
}
Dieses Möchte ich in dem Ctypes.Structure natürlich nachbauen damit ich das casten kann ( und natürlich auch benutzen)
In Python 3 gibt es ja auch in multiprocessing Semaphoren nur kann ich die nicht in meinem ctypes.structure benutzen.

Ich habe schon meinen Freund Google gefragt nur leider konnte der mir nicht helfen.
Jetzt habe ich überlegt ob ich ihrgendwie die semaphore.h datei umbauen kann um die zu benutzen jedoch fehlt mir da ein Denk anstoß.
Den bei ctypes habe ich nichts passendes Gefunden.

Hatte jemand von euch damit schon mal was gemacht ?
bzw. weiss jemand wie dieses problem lösen kann?

P.S. gibt es eingendlich ihrgend wo so etwas wie die API in java oder c für Python ?
Habe bis jetzt nur die http://docs.python.org/release/3.1.3/index.html Seite gefunden und die ist ja nicht vollständig.

Gruß
ignis-draco
BlackJack

@ignis-draco: Da wirst Du in den Header-Dateien nachforschen müssen wie `sem_t` tatsächlich deklariert ist. Bei meinem System lande ich da bei:

Code: Alles auswählen

typedef union
{
  char __size[__SIZEOF_SEM_T];
  long int __align;
} sem_t;
Wobei __SIZEOF_SEM_T davon abhängt, ob es ein 32- oder 64-Bit-System ist. Die Konstante ist dann 16 oder 32.

Was meinst Du damit, dass die Dokumentation nicht vollständig ist?
ignis-draco
User
Beiträge: 15
Registriert: Freitag 25. Februar 2011, 12:33

BlackJack hat geschrieben: Was meinst Du damit, dass die Dokumentation nicht vollständig ist?
z.b. die funktion from_buffer() die man auf einen Ctypes.sturcture auf rufen kann taucht da nicht auf. Zu dem ist das
alles sehr unübersichtlich wenn man sich da gegen die java API (http://download.oracle.com/javase/1.5.0/docs/api/)
anschaut bei der man mit wenigen klicks dirckt sehen kann welches Objekt welche funktionne hat.

Mit der h datei werde ich mal schauen. Wenn es gernicht geht werde ich einfach eine so datei bauen und die davor schalten.

Danke für die info schon mal

gruß
ignis-draco
BlackJack

@ignis-draco: from_buffer() ist dokumentiert. Man muss die Dokumentation tatsächlich lesen um die Zusammenhänge zu verstehen und kann nicht immer irgendwo einsteigen. Andererseits wird das bei Java-API-Dokumentation auch oft schnell unübersichtlich, wenn man sich da von einem Link zum anderen hangeln muss um ein Gesamtbild zu bekommen und dann oft immer nur die einzelnen Methoden platt erklärt findet, aber nirgends wie das eigentlich alles zusammen spielen soll. Da mag ich dann zusammenhängend geschriebene Texte, die einem die Bibliothek erklären, doch lieber.

Wenn ich wissen will welche Methoden ein Objekt hat, schaue ich mir das in einer Python-Shell an. Und bei der Python-Dokumentation sollte man unbedingt immer an den Link zum Index oben rechts auf der Seite denken.
ignis-draco
User
Beiträge: 15
Registriert: Freitag 25. Februar 2011, 12:33

@BlackJack
Habe übersehen das man auch nach Modulen suchen kann. Und an den Text muss ich mich halt gewöhnen.

Habe das Problem mit den Semaphoren gelöst.

Nur Falls jemand mal auf das gleiche Problem stößt.

Ich habe eine so Datei gebaut die sich nur um den Umgang mit den Semaphoren kümmert.
Aber auf das Shard Memory greife ich weiterhin mit Python zu und habe einfach in dem
ctypes structure ein dummy eingesetzt der so groß wie der Semaphore ist damit from_buffer weitehin geht.
So habe ich nicht so starke Gewindigkeits einbussen als wenn ich alles durch die so Datei Tunnel.

Jetzt hänge ich nur noch an einem Zweidimmenionalen Array fest aber das müsste ja auch mach bar sein
Antworten