mirror of
https://github.com/powerline/powerline.git
synced 2025-07-27 07:44:36 +02:00
Replace update_lock with shutdon_event
This commit is contained in:
parent
07c2ea1176
commit
80e55b0c81
@ -5,18 +5,17 @@ from __future__ import absolute_import
|
|||||||
from powerline.lib.time import monotonic
|
from powerline.lib.time import monotonic
|
||||||
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from threading import Thread, Lock
|
from threading import Thread, Lock, Event
|
||||||
|
|
||||||
|
|
||||||
class ThreadedSegment(object):
|
class ThreadedSegment(object):
|
||||||
daemon = True
|
|
||||||
min_sleep_time = 0.1
|
min_sleep_time = 0.1
|
||||||
update_first = True
|
update_first = True
|
||||||
interval = 1
|
interval = 1
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(ThreadedSegment, self).__init__()
|
super(ThreadedSegment, self).__init__()
|
||||||
self.update_lock = Lock()
|
self.shutdown_event = Event()
|
||||||
self.write_lock = Lock()
|
self.write_lock = Lock()
|
||||||
self.keep_going = True
|
self.keep_going = True
|
||||||
self.run_once = True
|
self.run_once = True
|
||||||
@ -50,18 +49,16 @@ class ThreadedSegment(object):
|
|||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.thread = Thread(target=self.run)
|
self.thread = Thread(target=self.run)
|
||||||
self.thread.daemon = self.daemon
|
|
||||||
self.thread.start()
|
self.thread.start()
|
||||||
|
|
||||||
def sleep(self, adjust_time):
|
def sleep(self, adjust_time):
|
||||||
sleep(max(self.interval - adjust_time, self.min_sleep_time))
|
self.shutdown_event.wait(max(self.interval - adjust_time, self.min_sleep_time))
|
||||||
|
if self.shutdown_event.is_set():
|
||||||
|
self.keep_going = False
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while self.keep_going:
|
while self.keep_going:
|
||||||
start_time = monotonic()
|
start_time = monotonic()
|
||||||
|
|
||||||
try:
|
|
||||||
if self.update_lock.acquire(False):
|
|
||||||
try:
|
try:
|
||||||
self.update()
|
self.update()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -69,20 +66,10 @@ class ThreadedSegment(object):
|
|||||||
self.skip = True
|
self.skip = True
|
||||||
else:
|
else:
|
||||||
self.skip = False
|
self.skip = False
|
||||||
else:
|
|
||||||
return
|
|
||||||
finally:
|
|
||||||
# Release lock in any case. If it is not locked in this thread,
|
|
||||||
# it was done in main thread in .shutdown method, and the lock
|
|
||||||
# will never be released.
|
|
||||||
self.update_lock.release()
|
|
||||||
|
|
||||||
self.sleep(monotonic() - start_time)
|
self.sleep(monotonic() - start_time)
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
if self.keep_going:
|
self.shutdown_event.set()
|
||||||
self.keep_going = False
|
|
||||||
self.update_lock.acquire()
|
|
||||||
|
|
||||||
def set_interval(self, interval=None):
|
def set_interval(self, interval=None):
|
||||||
# Allowing “interval” keyword in configuration.
|
# Allowing “interval” keyword in configuration.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user