initial commit
This commit is contained in:
commit
a5e78cca81
|
@ -0,0 +1,17 @@
|
||||||
|
.*\.py[co]$
|
||||||
|
.*~$
|
||||||
|
.*\.orig$
|
||||||
|
.*\#.*$
|
||||||
|
.*@.*$
|
||||||
|
\.coverage$
|
||||||
|
htmlcov$
|
||||||
|
\.DS_Store$
|
||||||
|
venv$
|
||||||
|
distribute_setup.py$
|
||||||
|
distribute-\d+.\d+.\d+.tar.gz$
|
||||||
|
build$
|
||||||
|
dist$
|
||||||
|
.*\.egg-info$
|
||||||
|
|
||||||
|
# Directory created by the "tox" command (ex: tox -e py27)
|
||||||
|
.tox
|
|
@ -0,0 +1,13 @@
|
||||||
|
asyncio event loop scheduling callbacks in eventlet.
|
||||||
|
|
||||||
|
Implemented:
|
||||||
|
|
||||||
|
* call_soon
|
||||||
|
* call_later
|
||||||
|
* call_at
|
||||||
|
|
||||||
|
To do:
|
||||||
|
|
||||||
|
* stop
|
||||||
|
* run_until_complete
|
||||||
|
* run_forever
|
|
@ -0,0 +1,43 @@
|
||||||
|
import trollius
|
||||||
|
import eventlet
|
||||||
|
|
||||||
|
class EventLoopPolicy(trollius.DefaultEventLoopPolicy):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class EventLoop(trollius.SelectorEventLoop):
|
||||||
|
def __init__(self, selector=None):
|
||||||
|
super(EventLoop, self).__init__(selector=selector)
|
||||||
|
self._pool = eventlet.GreenPool()
|
||||||
|
self._timers = []
|
||||||
|
|
||||||
|
def _call(self, handle):
|
||||||
|
if handle._cancelled:
|
||||||
|
return
|
||||||
|
handle._run()
|
||||||
|
|
||||||
|
def call_soon(self, callback, *args):
|
||||||
|
handle = trollius.Handle(callback, args, self)
|
||||||
|
self._pool.spawn(self._call, handle)
|
||||||
|
return handle
|
||||||
|
|
||||||
|
def _call_later(self, handle):
|
||||||
|
greenthread = eventlet.getcurrent()
|
||||||
|
self._timers.remove(greenthread)
|
||||||
|
self._call(handle)
|
||||||
|
|
||||||
|
def call_later(self, delay, callback, *args):
|
||||||
|
# FIXME: cancelling the handle should unschedule the timer
|
||||||
|
handle = trollius.Handle(callback, args, self)
|
||||||
|
greenthread = eventlet.spawn_after(delay, self._call_later, handle)
|
||||||
|
self._timers.append(greenthread)
|
||||||
|
return handle
|
||||||
|
|
||||||
|
def call_at(self, when, callback, *args):
|
||||||
|
delay = when - self.time()
|
||||||
|
return self.call_later(delay, callback, *args)
|
||||||
|
|
||||||
|
def run_forever(self):
|
||||||
|
self._pool.waitall()
|
||||||
|
# FIXME: more efficient code :-)
|
||||||
|
while self._timers:
|
||||||
|
eventlet.sleep(0.1)
|
Loading…
Reference in New Issue