I have a Python 2.7 program running an infinite while loop and I want to incorporate a timer interrupt. What I aim to do is to set off a timer at some point in the loop, and when 5 seconds have elapsed I want the code to branch to a specific part of the while loop.
What I have been doing so far is the following: in each iteration of the while loop I am checking how much time has elapsed when I reach that point in the code using
time.clock()
and if the difference exceeds 5 I run the chunk of code I mean to run
However that way 7 seconds might pass before I evaluate the time, it will be >5sec but I want to go there exactly when 5 seconds pass
Also, I need this to work for more than 1 counter (possibly up to a 100) but I do not want the interrupts to interrupt each other. Using Timer did not work either.
I know this can be done using timer interrupts in assembly but how can I do that in python?
The Interrupt class represents a single interrupt pin in the block design. It mimics a python Event by having a single wait function that blocks until the interrupt is raised. The event will be cleared automatically when the interrupt is cleared.
To stop code execution in Python you first need to import the sys object. After this, you can then call the exit() method to stop the program from running.
If a single event is to be handled, then the easiest way is to use the signal
framework which is a standard module of Python.
However, if we need a fully-fledged scheduler, then we have to resort to another module: sched
. Here is a pointer to the official documentation. Please be aware, though, that in multi-threaded environments sched
has limitations with respect to thread-safety.
Another option is the Advanced Python Scheduler, which is not part of the standard distribution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With