timer innerhalb eines 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
pythone
User
Beiträge: 3
Registriert: Montag 4. Februar 2019, 09:06

Hallo zusammen,

ich habe folgendes Problem:

Innerhalb eines threads lasse ich einen Scheduler laufen, der nach einer variablen Zeit(ms-bereich) Nachrichten auf einen Bus schickt. Dies funktioniert soweit auch, allerdings besteht das Problem, dass das Program bei sehr kleinen zeitlichen Abständen(einstelliger ms bereich) ausgebremst wird. Läuft im Hintergrund allerdings ein anderes Program, beispielsweise ein Video, wird das program nicht so stark ausgebremst. Hier der Code:

Code: Alles auswählen

while time.time() <= next_slot:
    QApplication.processEvents()
Sleep ist leider nicht besonders hilfreich hier, da nicht sehr genau und für diese kleinen Werte nicht geeignet. :roll:

Habt ihr eventuell Hinweise was ich verändern könnte?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da setzt du auf die falsche Technologie. Python ist nicht so besonders schnell. Und kann kein echtes Multithreading, weil es ein global Interpreter lock hat. Dazu dann noch präzise IO - das wird denke ich nix.

Beschreib mal ein bisschen mehr, was du da für ein Setup hast, und was genau da passieren soll.
pythone
User
Beiträge: 3
Registriert: Montag 4. Februar 2019, 09:06

Hallo,

es geht um ein Lichtszenario, die LED Treiber sind via RS485 verbunden.

Ich könnte die Wartezeiten eventuell auch vergrößern, aber trotzdem wäre es schön, die Wartezeit unabhängig davon zu machen, ob etwas anderes im Hintergrund läuft.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und welche Hardware? Raspberry PI?
pythone
User
Beiträge: 3
Registriert: Montag 4. Februar 2019, 09:06

beaglebone black
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oh. Dann hättest du eigentlich ganz andere Möglichkeiten. Der hat ja die PRUs. Damit kannst du 100% stabil solche Aufgaben erledigen. Der Preis dafür ist sich in dessen assembler einzuarbeiten. Ich finde den recht ok.

https://wiki.thing-printer.com/index.ph ... BeagleBone

Da ist dann das OS und sein scheduler raus. Ansonsten ist die Alternative

- zwei Prozesse, GUI & Treiber. Den Treiber so schmal wie nur irgend möglich. Außer Kommunikation mit der GUI und dem Bus sollte der nicht viel tun.
- PREEMPT_RT Kernel benutzen
- den Treiber entsprechend hoch priorisieren. 80 oder so.
Antworten