added schedule_call_global function to hub (uncancellable timer) and schedule_call_local (alias for schedule_call)
This commit is contained in:
@@ -241,9 +241,10 @@ class BaseHub(object):
|
|||||||
# the 0 placeholder makes it easy to bisect_right using (now, 1)
|
# the 0 placeholder makes it easy to bisect_right using (now, 1)
|
||||||
self.next_timers.append((when, 0, info))
|
self.next_timers.append((when, 0, info))
|
||||||
|
|
||||||
def add_timer(self, timer):
|
def add_timer(self, timer, track=True):
|
||||||
scheduled_time = self.clock() + timer.seconds
|
scheduled_time = self.clock() + timer.seconds
|
||||||
self._add_absolute_timer(scheduled_time, timer)
|
self._add_absolute_timer(scheduled_time, timer)
|
||||||
|
if track:
|
||||||
self.track_timer(timer)
|
self.track_timer(timer)
|
||||||
return scheduled_time
|
return scheduled_time
|
||||||
|
|
||||||
@@ -259,7 +260,7 @@ class BaseHub(object):
|
|||||||
del self.timers_by_greenlet[timer.greenlet][timer]
|
del self.timers_by_greenlet[timer.greenlet][timer]
|
||||||
if not self.timers_by_greenlet[timer.greenlet]:
|
if not self.timers_by_greenlet[timer.greenlet]:
|
||||||
del self.timers_by_greenlet[timer.greenlet]
|
del self.timers_by_greenlet[timer.greenlet]
|
||||||
except KeyError:
|
except (KeyError, AttributeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def timer_canceled(self, timer):
|
def timer_canceled(self, timer):
|
||||||
@@ -272,16 +273,30 @@ class BaseHub(object):
|
|||||||
ins(t, item)
|
ins(t, item)
|
||||||
del self.next_timers[:]
|
del self.next_timers[:]
|
||||||
|
|
||||||
def schedule_call(self, seconds, cb, *args, **kw):
|
def schedule_call_local(self, seconds, cb, *args, **kw):
|
||||||
"""Schedule a callable to be called after 'seconds' seconds have
|
"""Schedule a callable to be called after 'seconds' seconds have
|
||||||
elapsed.
|
elapsed. Cancel the timer if greenlet has exited.
|
||||||
seconds: The number of seconds to wait.
|
seconds: The number of seconds to wait.
|
||||||
cb: The callable to call after the given time.
|
cb: The callable to call after the given time.
|
||||||
*args: Arguments to pass to the callable when called.
|
*args: Arguments to pass to the callable when called.
|
||||||
**kw: Keyword arguments to pass to the callable when called.
|
**kw: Keyword arguments to pass to the callable when called.
|
||||||
"""
|
"""
|
||||||
t = Timer(seconds, cb, *args, **kw)
|
t = Timer(seconds, cb, *args, **kw)
|
||||||
self.add_timer(t)
|
self.add_timer(t, track=True)
|
||||||
|
return t
|
||||||
|
|
||||||
|
schedule_call = schedule_call_local
|
||||||
|
|
||||||
|
def schedule_call_global(self, seconds, cb, *args, **kw):
|
||||||
|
"""Schedule a callable to be called after 'seconds' seconds have
|
||||||
|
elapsed. The timer will NOT
|
||||||
|
seconds: The number of seconds to wait.
|
||||||
|
cb: The callable to call after the given time.
|
||||||
|
*args: Arguments to pass to the callable when called.
|
||||||
|
**kw: Keyword arguments to pass to the callable when called.
|
||||||
|
"""
|
||||||
|
t = Timer(seconds, cb, *args, **kw)
|
||||||
|
self.add_timer(t, track=False)
|
||||||
return t
|
return t
|
||||||
|
|
||||||
def fire_timers(self, when):
|
def fire_timers(self, when):
|
||||||
|
@@ -113,11 +113,12 @@ class Hub(hub.BaseHub):
|
|||||||
self.interrupted = False
|
self.interrupted = False
|
||||||
raise KeyboardInterrupt()
|
raise KeyboardInterrupt()
|
||||||
|
|
||||||
def add_timer(self, timer):
|
def add_timer(self, timer, track=True):
|
||||||
# store the pyevent timer object so that we can cancel later
|
# store the pyevent timer object so that we can cancel later
|
||||||
eventtimer = libev.Timer(timer.seconds, 0, self._evloop, timer)
|
eventtimer = libev.Timer(timer.seconds, 0, self._evloop, timer)
|
||||||
timer.impltimer = eventtimer
|
timer.impltimer = eventtimer
|
||||||
eventtimer.start()
|
eventtimer.start()
|
||||||
|
if track:
|
||||||
self.track_timer(timer)
|
self.track_timer(timer)
|
||||||
|
|
||||||
def timer_finished(self, timer):
|
def timer_finished(self, timer):
|
||||||
|
@@ -118,11 +118,12 @@ class Hub(hub.BaseHub):
|
|||||||
self.interrupted = False
|
self.interrupted = False
|
||||||
raise KeyboardInterrupt()
|
raise KeyboardInterrupt()
|
||||||
|
|
||||||
def add_timer(self, timer):
|
def add_timer(self, timer, track=True):
|
||||||
# store the pyevent timer object so that we can cancel later
|
# store the pyevent timer object so that we can cancel later
|
||||||
eventtimer = event.timeout(timer.seconds, timer)
|
eventtimer = event.timeout(timer.seconds, timer)
|
||||||
timer.impltimer = eventtimer
|
timer.impltimer = eventtimer
|
||||||
eventtimer.add()
|
eventtimer.add()
|
||||||
|
if track:
|
||||||
self.track_timer(timer)
|
self.track_timer(timer)
|
||||||
|
|
||||||
def timer_finished(self, timer):
|
def timer_finished(self, timer):
|
||||||
|
@@ -111,7 +111,7 @@ class BaseTwistedHub(object):
|
|||||||
def exc_descriptor(self, _fileno):
|
def exc_descriptor(self, _fileno):
|
||||||
pass # XXX do something sensible here
|
pass # XXX do something sensible here
|
||||||
|
|
||||||
def schedule_call(self, seconds, func, *args, **kwargs):
|
def schedule_call_local(self, seconds, func, *args, **kwargs):
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
def call_with_timer_attached(*args1, **kwargs1):
|
def call_with_timer_attached(*args1, **kwargs1):
|
||||||
try:
|
try:
|
||||||
@@ -124,6 +124,12 @@ class BaseTwistedHub(object):
|
|||||||
self.track_timer(timer)
|
self.track_timer(timer)
|
||||||
return timer
|
return timer
|
||||||
|
|
||||||
|
schedule_call = schedule_call_local
|
||||||
|
|
||||||
|
def schedule_call_global(self, seconds, func, *args, **kwargs):
|
||||||
|
from twisted.internet import reactor
|
||||||
|
return callLater(reactor, seconds, func, *args, **kwargs)
|
||||||
|
|
||||||
def track_timer(self, timer):
|
def track_timer(self, timer):
|
||||||
try:
|
try:
|
||||||
current_greenlet = greenlet.getcurrent()
|
current_greenlet = greenlet.getcurrent()
|
||||||
|
Reference in New Issue
Block a user