mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-12-08 20:39:01 +00:00
Shut down GPIO threads nicely
The motion sensor queue doesn't shut down properly at script end at the moment and prevents the interpreter shutting down. This is because it's a non-daemon thread so `__del__` never gets run and so on. This is a bit of a major PR - I can split it up if you want. Firstly it makes a common base class called `GPIODevice` for both `InputDevice` and `OutputDevice`. This just takes care of the read-only pin stuff. Next it makes a `GPIOThread` class that ensures its a daemon thread, and which also ensures proper cleanup on shutdown. Finally, it fixes `MotionSensor` to use the new `GPIOThread` class (tested this time! Works nicely) and adds the `blink` method to the `LED` class (which also works nicely this time).
This commit is contained in:
@@ -4,14 +4,11 @@ import atexit
|
||||
|
||||
from RPi import GPIO
|
||||
|
||||
|
||||
def gpiozero_shutdown():
|
||||
GPIO.cleanup()
|
||||
|
||||
atexit.register(gpiozero_shutdown)
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
from .devices import (
|
||||
_gpio_threads_shutdown,
|
||||
GPIODeviceError,
|
||||
GPIODevice,
|
||||
)
|
||||
from .input_devices import (
|
||||
InputDeviceError,
|
||||
InputDevice,
|
||||
@@ -26,3 +23,13 @@ from .output_devices import (
|
||||
Buzzer,
|
||||
Motor,
|
||||
)
|
||||
|
||||
|
||||
def gpiozero_shutdown():
|
||||
_gpio_threads_shutdown()
|
||||
GPIO.cleanup()
|
||||
|
||||
atexit.register(gpiozero_shutdown)
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user