Package restkit :: Package manager :: Module meventlet
[hide private]
[frames] | no frames]

Source Code for Module restkit.manager.meventlet

 1  # -*- coding: utf-8 - 
 2  # 
 3  # This file is part of restkit released under the MIT license.  
 4  # See the NOTICE for more information. 
 5   
 6  """ 
 7  eventlet connection manager.  
 8  """ 
 9  import signal 
10   
11  import eventlet 
12  from eventlet.semaphore import Semaphore 
13   
14  from .base import Manager 
15   
16 -class EventletConnectionReaper(object):
17 18 running = False 19
20 - def __init__(self, manager, delay=150):
21 self.manager = manager 22 self.delay = delay
23
24 - def start(self):
25 self.running = True 26 g = eventlet.spawn(self._exec) 27 g.link(self._exit)
28
29 - def _exit(self, g):
30 try: 31 g.wait() 32 except: 33 pass 34 self.running = False
35
36 - def _exec(self):
37 while True: 38 eventlet.sleep(self.delay) 39 self.manager.murder_connections()
40
41 - def ensure_started(self):
42 if not self.running: 43 self.start()
44
45 -class EventletManager(Manager):
46
47 - def get_lock(self):
48 return Semaphore(1)
49
50 - def start(self):
51 if self.with_signaling: 52 signal.signal(signal.SIGALRM, self.murder_connections) 53 signal.alarm(self.timeout) 54 else: 55 self._reaper = EventletConnectionReaper(self, delay=self.timeout) 56 self._reaper.ensure_started()
57