mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Fix #181
Added source_delay property to SourceMixin which means it'll now appear everywhere. Default is 0.01 which is just enough to drop CPU usage while remaining responsive enough for the majority of purposes.
This commit is contained in:
		| @@ -23,6 +23,7 @@ from .exc import ( | ||||
|     GPIODeviceClosed, | ||||
|     GPIOBadQueueLen, | ||||
|     GPIOBadSampleWait, | ||||
|     GPIOBadSourceDelay, | ||||
|     ) | ||||
|  | ||||
| # Get a pin implementation to use as the default; we prefer RPi.GPIO's here | ||||
| @@ -164,6 +165,7 @@ class SourceMixin(object): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         self._source = None | ||||
|         self._source_thread = None | ||||
|         self._source_delay = 0.01 | ||||
|         super(SourceMixin, self).__init__(*args, **kwargs) | ||||
|  | ||||
|     def close(self): | ||||
| @@ -176,13 +178,28 @@ class SourceMixin(object): | ||||
|     def _copy_values(self, source): | ||||
|         for v in source: | ||||
|             self.value = v | ||||
|             if self._source_thread.stopping.wait(0): | ||||
|             if self._source_thread.stopping.wait(self._source_delay): | ||||
|                 break | ||||
|  | ||||
|     @property | ||||
|     def source_delay(self): | ||||
|         """ | ||||
|         The delay (measured in seconds) in the loop used to read values from | ||||
|         :attr:`source`. Defaults to 0.01 seconds which is generally sufficient | ||||
|         to keep CPU usage to a minimum while providing adequate responsiveness. | ||||
|         """ | ||||
|         return self._source_delay | ||||
|  | ||||
|     @source_delay.setter | ||||
|     def source_delay(self, value): | ||||
|         if value < 0: | ||||
|             raise GPIOBadSourceDelay('source_delay must be 0 or greater') | ||||
|         self._source_delay = float(value) | ||||
|  | ||||
|     @property | ||||
|     def source(self): | ||||
|         """ | ||||
|         The iterable to use as a source of values for `value`. | ||||
|         The iterable to use as a source of values for :attr:`value`. | ||||
|         """ | ||||
|         return self._source | ||||
|  | ||||
|   | ||||
| @@ -31,6 +31,9 @@ class GPIOBadQueueLen(GPIODeviceError, ValueError): | ||||
| class GPIOBadSampleWait(GPIODeviceError, ValueError): | ||||
|     "Error raised when a negative sampling wait period is specified" | ||||
|  | ||||
| class GPIOBadSourceDelay(GPIODeviceError, ValueError): | ||||
|     "Error raised when a negative source delay is specified" | ||||
|  | ||||
| class InputDeviceError(GPIODeviceError): | ||||
|     "Base class for errors specific to the InputDevice hierarchy" | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user