Module queueHandler
[hide private]
[frames] | no frames]

Source Code for Module queueHandler

 1  #queueHandler.py 
 2  #A part of NonVisual Desktop Access (NVDA) 
 3  #Copyright (C) 2006-2007 NVDA Contributors <http://www.nvda-project.org/> 
 4  #This file is covered by the GNU General Public License. 
 5  #See the file COPYING for more details. 
 6   
 7  import types 
 8  from Queue import Queue 
 9  import globalVars 
10  from logHandler import log 
11  import watchdog 
12   
13  eventQueue=Queue() 
14  eventQueue.__name__="eventQueue" 
15  generators={} 
16  lastGeneratorObjID=0 
17   
18 -def registerGeneratorObject(generatorObj):
19 global generators,lastGeneratorObjID 20 if not isinstance(generatorObj,types.GeneratorType): 21 raise TypeError('Arg 2 must be a generator object, not %s'%type(generatorObj)) 22 lastGeneratorObjID+=1 23 log.debug("Adding generator %d"%lastGeneratorObjID) 24 generators[lastGeneratorObjID]=generatorObj 25 return lastGeneratorObjID
26
27 -def cancelGeneratorObject(generatorObjID):
28 global generators 29 try: 30 del generators[generatorObjID] 31 except KeyError: 32 pass
33
34 -def queueFunction(queue,func,*args,**kwargs):
35 queue.put_nowait((func,args,kwargs))
36
37 -def isRunningGenerators():
38 res=len(generators)>0 39 log.debug("generators running: %s"%res)
40
41 -def flushQueue(queue):
42 for count in range(queue.qsize()+1): 43 if not queue.empty(): 44 (func,args,kwargs)=queue.get_nowait() 45 watchdog.alive() 46 try: 47 func(*args,**kwargs) 48 except: 49 log.exception("Error in func %s from %s"%(func.__name__,queue.__name__))
50
51 -def isPendingItems(queue):
52 if not queue.empty(): 53 res=True 54 else: 55 res=False 56 return res
57
58 -def pumpAll():
59 # This dict can mutate during iteration, so use keys(). 60 for ID in generators.keys(): 61 # KeyError could occur within the generator itself, so retrieve the generator first. 62 try: 63 gen = generators[ID] 64 except KeyError: 65 # Generator was cancelled. This is fine. 66 continue 67 watchdog.alive() 68 try: 69 next(gen) 70 except StopIteration: 71 log.debug("generator %s finished"%ID) 72 del generators[ID] 73 except: 74 log.exception("error in generator %d"%ID) 75 del generators[ID] 76 flushQueue(eventQueue)
77