/usr/lib/python2.6/site-packages/supervisor/medusa
NameSizeModeActions
auth_handler.py47390644editdlrm
auth_handler.pyc45130644editdlrm
auth_handler.pyo45130644editdlrm
chat_server.py45350644editdlrm
chat_server.pyc64270644editdlrm
chat_server.pyo64270644editdlrm
counter.py14400644editdlrm
counter.pyc20390644editdlrm
counter.pyo20390644editdlrm
default_handler.py63310644editdlrm
default_handler.pyc50340644editdlrm
default_handler.pyo50340644editdlrm
event_loop.py29810644editdlrm
event_loop.pyc35130644editdlrm
event_loop.pyo35130644editdlrm
filesys.py112060644editdlrm
filesys.pyc135980644editdlrm
filesys.pyo135980644editdlrm
ftp_server.py405520644editdlrm
ftp_server.pyc347270644editdlrm
ftp_server.pyo347270644editdlrm
http_date.py34150644editdlrm
http_date.pyc34680644editdlrm
http_date.pyo34680644editdlrm
http_server.py252170644editdlrm
http_server.pyc214680644editdlrm
http_server.pyo214680644editdlrm
logger.py80000644editdlrm
logger.pyc109900644editdlrm
logger.pyo109900644editdlrm
medusa_gif.py27720644editdlrm
medusa_gif.pyc11560644editdlrm
medusa_gif.pyo11560644editdlrm
monitor.py110540644editdlrm
monitor.pyc122850644editdlrm
monitor.pyo122850644editdlrm
monitor_client.py32730644editdlrm
monitor_client.pyc53900644editdlrm
monitor_client.pyo53900644editdlrm
monitor_client_win32.py13340644editdlrm
monitor_client_win32.pyc20940644editdlrm
monitor_client_win32.pyo20940644editdlrm
m_syslog.py73510644editdlrm
m_syslog.pyc40060644editdlrm
m_syslog.pyo40060644editdlrm
producers.py94390644editdlrm
producers.pyc116340644editdlrm
producers.pyo116340644editdlrm
put_handler.py33240644editdlrm
put_handler.pyc35110644editdlrm
put_handler.pyo35110644editdlrm
redirecting_handler.py14030644editdlrm
redirecting_handler.pyc21590644editdlrm
redirecting_handler.pyo21590644editdlrm
resolver.py155590644editdlrm
resolver.pyc124010644editdlrm
resolver.pyo124010644editdlrm
rpc_client.py96750644editdlrm
rpc_client.pyc103460644editdlrm
rpc_client.pyo103460644editdlrm
rpc_server.py99530644editdlrm
rpc_server.pyc95360644editdlrm
rpc_server.pyo95360644editdlrm
script_handler.py65540644editdlrm
script_handler.pyc66510644editdlrm
script_handler.pyo66510644editdlrm
setup.py4960644editdlrm
setup.pyc7290644editdlrm
setup.pyo7290644editdlrm
status_handler.py93520644editdlrm
status_handler.pyc96720644editdlrm
status_handler.pyo96720644editdlrm
unix_user_handler.py23120644editdlrm
unix_user_handler.pyc23610644editdlrm
unix_user_handler.pyo23610644editdlrm
virtual_handler.py17240644editdlrm
virtual_handler.pyc31640644editdlrm
virtual_handler.pyo31640644editdlrm
xmlrpc_handler.py29440644editdlrm
xmlrpc_handler.pyc37840644editdlrm
xmlrpc_handler.pyo37840644editdlrm
__init__.py1280644editdlrm
__init__.pyc2770644editdlrm
__init__.pyo2770644editdlrm
Edit: /usr/lib/python2.6/site-packages/supervisor/medusa/event_loop.py (2981B)
# -*- Mode: Python -*- # This is an alternative event loop that supports 'schedulable events'. # You can specify an event callback to take place after seconds. # Important usage note: The granularity of the time-check is limited # by the argument to 'go()'; if there is little or no # activity and you specify a 30-second timeout interval, then the # schedule of events may only be checked at those 30-second intervals. # In other words, if you need 1-second resolution, you will have to # poll at 1-second intervals. This facility is more useful for longer # timeouts ("if the channel doesn't close in 5 minutes, then forcibly # close it" would be a typical usage). import asyncore import bisect import time socket_map = asyncore.socket_map class event_loop: def __init__ (self): self.events = [] self.num_channels = 0 self.max_channels = 0 def go (self, timeout=30.0, granularity=15): global socket_map last_event_check = 0 while socket_map: now = int(time.time()) if (now - last_event_check) >= granularity: last_event_check = now fired = [] # yuck. i want my lisp. i = j = 0 while i < len(self.events): when, what = self.events[i] if now >= when: fired.append (what) j = i + 1 else: break i = i + 1 if fired: self.events = self.events[j:] for what in fired: what (self, now) # sample the number of channels n = len(asyncore.socket_map) self.num_channels = n if n > self.max_channels: self.max_channels = n asyncore.poll (timeout) def schedule (self, delta, callback): now = int (time.time()) bisect.insort (self.events, (now + delta, callback)) def __len__ (self): return len(self.events) class test (asyncore.dispatcher): def __init__ (self): asyncore.dispatcher.__init__ (self) def handle_connect (self): print 'Connected!' def writable (self): return not self.connected def connect_timeout_callback (self, event_loop, when): if not self.connected: print 'Timeout on connect' self.close() def periodic_thing_callback (self, event_loop, when): print 'A Periodic Event has Occurred!' # re-schedule it. event_loop.schedule (self, 15, self.periodic_thing_callback) if __name__ == '__main__': import socket el = event_loop() t = test () t.create_socket (socket.AF_INET, socket.SOCK_STREAM) el.schedule (10, t.connect_timeout_callback) el.schedule (15, t.periodic_thing_callback) t.connect (('squirl', 80)) el.go(1.0)