ya2 · news · projects · code · about

renamed lib to ya2
[pmachines.git] / ya2 / engine / cbmux.py
1 from threading import Lock
2
3
4 class CallbackMux:
5 # this is a sort of "multiplexer" i.e. it manages callbacks from threads
6 # and redirect them to the main thread (this prevents deadlocks)
7
8 def __init__(self):
9 self.lock = Lock()
10 self.callbacks = []
11 taskMgr.add(self.process_callbacks, 'processing callbacks')
12
13 def add_cb(self, func, args=None):
14 args = args or []
15 with self.lock: self.callbacks += [(func, args)]
16
17 def process_callbacks(self, task):
18 with self.lock:
19 callbacks = self.callbacks[:]
20 self.callbacks = []
21 for func, args in callbacks: func(*args)
22 return task.cont