Seite 1 von 1
Poll funktion Python oder Threads?
Verfasst: Mittwoch 28. Januar 2015, 20:59
von erdmulch
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?
Re: Poll funktion Python oder Threads?
Verfasst: Mittwoch 28. Januar 2015, 21:15
von EyDu
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

Re: Poll funktion Python oder Threads?
Verfasst: Mittwoch 28. Januar 2015, 21:21
von Sirius3
@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.
Re: Poll funktion Python oder Threads?
Verfasst: Mittwoch 28. Januar 2015, 21:25
von erdmulch
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!!!"
Re: Poll funktion Python oder Threads?
Verfasst: Donnerstag 29. Januar 2015, 01:51
von jerch
@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.
Re: Poll funktion Python oder Threads?
Verfasst: Donnerstag 29. Januar 2015, 16:55
von erdmulch
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
Re: Poll funktion Python oder Threads?
Verfasst: Donnerstag 29. Januar 2015, 18:12
von jerch
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?
Re: Poll funktion Python oder Threads?
Verfasst: Freitag 30. Januar 2015, 14:54
von amphi
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.
Re: Poll funktion Python oder Threads?
Verfasst: Freitag 30. Januar 2015, 17:42
von 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.