Package spade :: Module MessageReceiver
[hide private]
[frames] | no frames]

Source Code for Module spade.MessageReceiver

 1  import threading 
 2  import sys 
 3  from Queue import * 
 4  import time 
 5  
 
 6  #from munkware.mwQueue import *
 
 7  
 
 8  # Changed to be a 'daemonic' python Thread
 
9 -class MessageReceiver(threading.Thread):
10 - def __init__(self):
11 try: 12 import psyco 13 psyco.full() 14 except ImportError: 15 pass 16 threading.Thread.__init__(self) 17 self.post_mutex = threading.Lock() 18 self.mutex = threading.Lock() 19 self.not_empty = threading.Condition(self.mutex) 20 self.not_full = threading.Condition(self.mutex) 21 self.setDaemon(True) 22 #self.__messages = MessageList(0) 23 self.__messages = Queue(0)
24
25 - def __getMessage(self, block, tout):
26 try: 27 #if block: 28 # block_int = 1 29 #else: 30 # block_int = 0 31 #item = self.__messages.get(block_int)#, tout) 32 message = self.__messages.get(block, tout) 33 #self.__messages.get_commit(item[0]) 34 #message = item[1] 35 #print ">>> __getMessage: SUCCESS " 36 except Empty: 37 message = None 38 #print "MESSAGE = None - Empty "+str(tout) 39 #print ">>> __getMessage: EMPTY" 40 except: 41 message = None 42 #time.sleep(1) 43 #print "MESSAGE = None - otra.", sys.exc_info()[0] 44 #print ">>> __getMessage: FUCKING EXCEPTION" 45 46 return message
47 """ 48 def receive(self): 49 #returns a message if available 50 #else returns None 51 return self.__getMessage(False, None) 52 """
53 - def _receive(self, block = False, timeout = None, template = None):
54 """ 55 waits for a message during timeout 56 if timeout == None waits until a message is received 57 if no message is received returns None 58 """ 59 #print ">>> blockingReceive time_seg = " + str(time_seg) 60 if not template: 61 return self.__getMessage(block, timeout) 62 else: 63 self.not_empty.acquire() 64 for msg in self.__messages.queue: 65 if template.match(msg): 66 self.not_empty.release() 67 self.__messages.queue.remove(msg) 68 return msg 69 self.not_empty.release() 70 if not block: return None 71 else: 72 endtime = time.time()+timeout 73 self.not_empty.acquire() 74 while True: 75 for msg in self.__messages.queue: 76 if template.match(msg): 77 self.not_empty.release() 78 self.__messages.queue.remove(msg) 79 return msg 80 remaining = endtime - time.time() 81 if timeout and remaining <= 0.0: 82 self.not_empty.release() 83 return None 84 self.not_empty.wait(remaining)
85
86 - def postMessage(self, message):
87 if (message != None): 88 self.post_mutex.acquire() 89 #self.__messages.put_commit(self.__messages.put(message,block=True)) 90 self.not_full.acquire() 91 self.__messages.put(message,block=True) 92 self.not_empty.notify() 93 self.not_full.release() 94 #print ">>>>>MSG posteado DE VERDAD: " + str(message.getContent()) 95 self.post_mutex.release() 96 return True
97