mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +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