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

Source Code for Module restkit.manager.mgevent

 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  gevent connection manager.  
 8  """ 
 9  import signal 
10   
11  import gevent 
12  from gevent.coros import Semaphore 
13   
14  from restkit.manager.base import Manager 
15   
16 -class GeventConnectionReaper(gevent.Greenlet):
17 18 running = False 19
20 - def __init__(self, manager, delay=150):
21 self.manager = manager 22 self.delay = delay 23 gevent.Greenlet.__init__(self)
24
25 - def _run(self):
26 self.running = True 27 while True: 28 gevent.sleep(self.delay) 29 self.manager.murder_connections()
30
31 - def ensure_started(self):
32 if not self.running or self.ready(): 33 self.start()
34
35 -class GeventManager(Manager):
36
37 - def get_lock(self):
38 return Semaphore()
39
40 - def start(self):
41 if self.with_signaling: 42 signal.signal(signal.SIGALRM, self.murder_connections) 43 signal.alarm(self.timeout) 44 else: 45 self._reaper = GeventConnectionReaper(self, delay=self.timeout) 46 self._reaper.ensure_started()
47