Reduce the amount of calls in the MultiCall batch by removing

duplicates.  Increase the MultiCall timer to 200ms.
This commit is contained in:
Andrew Resch 2008-01-20 19:11:36 +00:00
commit f0b6833d17

View file

@ -134,7 +134,7 @@ class CoreProxy(gobject.GObject):
self._core = None self._core = None
self._multi = None self._multi = None
self._callbacks = [] self._callbacks = []
gobject.timeout_add(10, self.do_multicall) gobject.timeout_add(200, self.do_multicall)
def call(self, func, callback, *args): def call(self, func, callback, *args):
if self._core is None or self._multi is None: if self._core is None or self._multi is None:
@ -143,26 +143,31 @@ class CoreProxy(gobject.GObject):
_func = getattr(self._multi, func) _func = getattr(self._multi, func)
if _func is not None: if _func is not None:
if len(args) == 0: if (func, args) in self._multi.get_call_list():
_func() index = self._multi.get_call_list().index((func, args))
self._callbacks[index].append(callback)
else: else:
_func(*args) if len(args) == 0:
self._callbacks.append(callback) _func()
else:
_func(*args)
self._callbacks.append([callback])
def do_multicall(self, block=False): def do_multicall(self, block=False):
if len(self._callbacks) == 0: if len(self._callbacks) == 0:
return True return True
if self._multi is not None: if self._multi is not None:
try: try:
try: try:
for i, ret in enumerate(self._multi()): for i, ret in enumerate(self._multi()):
try: try:
if block == False: for callback in self._callbacks[i]:
gobject.idle_add(self._callbacks[i], ret) if block == False:
else: gobject.idle_add(callback, ret)
self._callbacks[i](ret) else:
callback(ret)
except: except:
pass pass
except socket.error, e: except socket.error, e: