Seite 1 von 1

timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 09:13
von pythone
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?

Re: timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 09:52
von __deets__
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.

Re: timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 10:05
von pythone
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.

Re: timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 10:14
von __deets__
Und welche Hardware? Raspberry PI?

Re: timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 10:17
von pythone
beaglebone black

Re: timer innerhalb eines threads

Verfasst: Montag 4. Februar 2019, 10:30
von __deets__
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.