Poll funktion Python oder Threads?

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
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo Forum,

ich würde mich gerne ein wenig in die Poll Funktion einlesen:
https://docs.python.org/2/library/select.html
Der Hintergrund ist folgender:
Ich will ständig schauen ob sich die variable von "True" auf "False" geändert hat.
zuerst wollte ich es mit Threads machen, nach einigem googeln hab ich haber der obrige Link gefunden.

kann mir jemand sagen, ob dies für mein vorhaben das richtige ist?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Naja, das hängt davon ab ;-) Du hast uns zwar erläutert, dass du etwas mit einem bestimmten Ansatz lösen möchtest, hast uns dazu aber nicht das Problem verraten. Das macht es irgendwie schwierig bis unmöglich sich zu der Sinnhaftigkeit deiner Lösung zu äußern ;-)
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 18254
Registriert: Sonntag 21. Oktober 2012, 17:20

@erdmulch: wenn Du Dich in die Poll Funktion einlesen willst, dann tu das doch. Du brauchst von uns keine Erlaubnis, aber sie sei Dir trotzdem gewährt. Zum Schauen ob etwas von True auf False geändert wird, gibt es Semaphore oder Events.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Ich hab da eine kleine SPS die ich ansprechen kann.
Funktioniert auch alles soweit, wenn ich den Eingang manuell abfrage bekomm ich ein True bzw. False zurück.
nun würde ich dies aber gerne eleganter lösen in dem ich eine Funktion programmiere, die ständig schaut wie die Eingänge sind.
Wenn sich dann ein Eingang geändert hat, dann soll diese Information verarbeitet werden.
wie in diesem Beispiel:

Code: Alles auswählen

def Input (a):
     if a == 1:
         print "Hat alles geklappt!!!"
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@erdmulch:
Wie fragst Du denn den Eingang manuell ab? Dein Code zeigt das nicht. Wenn der Gerätetreiber den Eingang in sysfs oder per udev registriert, sollte es unter /sys/ oder /dev/ eine Datei dazu geben, die Du mit poll verwenden kannst. Ob dann wirklich nur die Zustandsänderungen rein kommen oder auch längere Sequenzen des gleichen Zustandes hängt wiederum vom Treiber oder Gerät ab. Falls es eine Datei in /dev/ gibt, funktioniert evtl. auch inotify, mit sysfs funktioniert es nicht zuverlässig.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

man muss sich das wie folgt vorstellen.
Ich habe einen Zufallsgenerator der irgendwann von 0 auf 1 umswitchet
Wenn der Zufallsgenerator die Zahl 1 ausgibt, dann soll auf meiner Konsole erscheinen "Die Zahl 1 wurde gezogen"
Jetzt habe ich natürlich mehr als nur einen "Zufalssgenerator(SPS Eingang)" wie stelle ich nun sicher, dass mein Programm nicht ständig beschäftig ist die Eingänge abzufragen?

hat jemand eine Idee wie man das umsetzt?

vielen Dank
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

erdmulch hat geschrieben:hat jemand eine Idee wie man das umsetzt?
Kaum vorstellbar, was aber eher an Deiner unterirdischen Problembeschreibung liegen dürfte. Gerät? Software? Variable von True auf False? poll? Zufallsgenerator? Mehrere Eingänge? - Das ist in etwa das Begriffsrauschen, was Deine Posts bei mir erzeugen. Was soll man darauf antworten Deiner Meinung nach?
amphi
User
Beiträge: 6
Registriert: Montag 29. September 2014, 08:53

Ich denke er möchte Listener auf den Eingängen, welche überprüfen ob nun '0' oder '1' gesetzt ist. Die Listener sollen aber nicht das Programm blockieren, sondern nebenher laufen.
Software is a possible solution to a stated problem. Anything more is just dreaming of unicorns and fairy dust. - Greg Strange
BlackJack

@amphi: Soviel haben wir denke ich schon verstanden, aber es ist immer noch nicht klar ob `select.poll()` überhaupt technisch funktioniert und wie da etwas angeschlossen ist und wie genau die Informationen in das Programm gelangen. Diese technischen Details müsste man aber wissen um beantworten zu können wie man das am besten ohne „busy waiting” und nebenläufig hinbekommt.
Antworten