lemonbar: Breakout condition logic to Shelf class
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import threading
|
||||
import subprocess, os
|
||||
import re # regexp
|
||||
from enum import Enum
|
||||
@@ -48,3 +49,28 @@ def create_new_fifo(fifo_file):
|
||||
logger.error('''Failed, couldn't create fifo file''')
|
||||
os.remove(config.pid_file) # Clean up own PID file
|
||||
sys.exit(0)
|
||||
|
||||
class Shelf():
|
||||
# A one-slot queue implemented with locks and condition objects
|
||||
def __init__(self, item = None):
|
||||
self.lock = threading.Lock()
|
||||
self.item_ready = threading.Condition(self.lock)
|
||||
self.item = item
|
||||
|
||||
def get(self):
|
||||
# Consumes item
|
||||
self.item_ready.acquire()
|
||||
if self.item is None:
|
||||
# Wait until becomes ready
|
||||
self.item_ready.wait()
|
||||
ret = self.item
|
||||
self.item = None
|
||||
self.item_ready.release()
|
||||
return ret
|
||||
|
||||
def put(self, item):
|
||||
# Discards previous item
|
||||
self.item_ready.acquire()
|
||||
self.item = item
|
||||
self.item_ready.notify()
|
||||
self.item_ready.release()
|
||||
|
||||
Reference in New Issue
Block a user