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 time import sleep
|
||||
from threading import Thread, Lock
|
||||
from threading import Thread, Lock, Event
|
||||
|
||||
|
||||
class ThreadedSegment(object):
|
||||
daemon = True
|
||||
min_sleep_time = 0.1
|
||||
update_first = True
|
||||
interval = 1
|
||||
|
||||
def __init__(self):
|
||||
super(ThreadedSegment, self).__init__()
|
||||
self.update_lock = Lock()
|
||||
self.shutdown_event = Event()
|
||||
self.write_lock = Lock()
|
||||
self.keep_going = True
|
||||
self.run_once = True
|
||||
@ -50,18 +49,16 @@ class ThreadedSegment(object):
|
||||
|
||||
def start(self):
|
||||
self.thread = Thread(target=self.run)
|
||||
self.thread.daemon = self.daemon
|
||||
self.thread.start()
|
||||
|
||||
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):
|
||||
while self.keep_going:
|
||||
start_time = monotonic()
|
||||
|
||||
try:
|
||||
if self.update_lock.acquire(False):
|
||||
try:
|
||||
self.update()
|
||||
except Exception as e:
|
||||
@ -69,20 +66,10 @@ class ThreadedSegment(object):
|
||||
self.skip = True
|
||||
else:
|
||||
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)
|
||||
|
||||
def shutdown(self):
|
||||
if self.keep_going:
|
||||
self.keep_going = False
|
||||
self.update_lock.acquire()
|
||||
self.shutdown_event.set()
|
||||
|
||||
def set_interval(self, interval=None):
|
||||
# Allowing “interval” keyword in configuration.
|
||||
|
Loading…
x
Reference in New Issue
Block a user