| Trees | Indices | Help |
|---|
|
|
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
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
33
36
40
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
57
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
| Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Nov 18 17:46:13 2011 | http://epydoc.sourceforge.net |