Add locks to fix concurrency issues
This commit is contained in:
parent
f5b157014d
commit
a6f9260964
5 changed files with 128 additions and 95 deletions
|
|
@ -1,3 +1,4 @@
|
|||
import logging
|
||||
from threading import Thread, Event
|
||||
|
||||
from .exceptions import ConnectionError, TimeoutError
|
||||
|
|
@ -22,17 +23,17 @@ class HeartbeatThread(Thread):
|
|||
def run(self):
|
||||
try:
|
||||
while not self._halt.is_set():
|
||||
try:
|
||||
self._send_heartbeat()
|
||||
except TimeoutError:
|
||||
pass
|
||||
if self._adrenaline.is_set():
|
||||
interval_in_seconds = self._hurry_interval_in_seconds
|
||||
else:
|
||||
interval_in_seconds = self._relax_interval_in_seconds
|
||||
self._rest.wait(interval_in_seconds)
|
||||
try:
|
||||
self._send_heartbeat()
|
||||
except TimeoutError:
|
||||
pass
|
||||
except ConnectionError:
|
||||
pass
|
||||
logging.debug('[heartbeat connection error]')
|
||||
|
||||
def relax(self):
|
||||
self._adrenaline.clear()
|
||||
|
|
@ -42,6 +43,10 @@ class HeartbeatThread(Thread):
|
|||
self._rest.set()
|
||||
self._rest.clear()
|
||||
|
||||
@property
|
||||
def hurried(self):
|
||||
return self._adrenaline.is_set()
|
||||
|
||||
def halt(self):
|
||||
self._rest.set()
|
||||
self._halt.set()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue