Make AsyncRateLimiter thread safe

This commit is contained in:
Kristóf Tóth 2018-07-31 09:14:33 +02:00
parent 4679a3494c
commit 128f48702a

View File

@ -59,17 +59,23 @@ class RateLimiter:
return 0 return 0
# TODO document this
class AsyncRateLimiter(RateLimiter): class AsyncRateLimiter(RateLimiter):
def __init__(self, rate_per_second, ioloop_factory): def __init__(self, rate_per_second, ioloop_factory):
self._ioloop_factory = ioloop_factory self._ioloop_factory = ioloop_factory
self._ioloop = None self._ioloop = None
self._last_callback = None self._last_callback = None
self._make_action_thread_safe()
super().__init__( super().__init__(
rate_per_second=rate_per_second, rate_per_second=rate_per_second,
action=self.async_action action=self.async_action
) )
def _make_action_thread_safe(self):
self.async_action = partial(self.ioloop.add_callback, self.async_action)
@lazy_property @lazy_property
def ioloop(self): def ioloop(self):
return self._ioloop_factory() return self._ioloop_factory()