mirror of
				https://github.com/avatao-content/baseimage-tutorial-framework
				synced 2025-11-04 12:22:54 +00:00 
			
		
		
		
	Refactor AsyncRateLimiter for ease of use (IOLoop passing)
This commit is contained in:
		@@ -4,6 +4,8 @@
 | 
			
		||||
from functools import wraps, partial
 | 
			
		||||
from time import time, sleep
 | 
			
		||||
 | 
			
		||||
from tfw.decorators.lazy_property import lazy_property
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RateLimiter:
 | 
			
		||||
    def __init__(self, rate_per_second, action=sleep):
 | 
			
		||||
@@ -34,19 +36,25 @@ class RateLimiter:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AsyncRateLimiter(RateLimiter):
 | 
			
		||||
    def __init__(self, rate_per_second, ioloop):
 | 
			
		||||
        self.ioloop = ioloop
 | 
			
		||||
        self.last_callback = None
 | 
			
		||||
    def __init__(self, rate_per_second, ioloop_factory):
 | 
			
		||||
        self._ioloop_factory = ioloop_factory
 | 
			
		||||
        self._ioloop = None
 | 
			
		||||
        self._last_callback = None
 | 
			
		||||
 | 
			
		||||
        super().__init__(
 | 
			
		||||
            rate_per_second=rate_per_second,
 | 
			
		||||
            action=self.async_action
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def async_action(self, seconds_to_next_call):
 | 
			
		||||
        if self.last_callback:
 | 
			
		||||
            self.ioloop.remove_timeout(self.last_callback)
 | 
			
		||||
    @lazy_property
 | 
			
		||||
    def ioloop(self):
 | 
			
		||||
        return self._ioloop_factory()
 | 
			
		||||
 | 
			
		||||
        self.last_callback = self.ioloop.call_later(
 | 
			
		||||
    def async_action(self, seconds_to_next_call):
 | 
			
		||||
        if self._last_callback:
 | 
			
		||||
            self.ioloop.remove_timeout(self._last_callback)
 | 
			
		||||
 | 
			
		||||
        self._last_callback = self.ioloop.call_later(
 | 
			
		||||
            seconds_to_next_call,
 | 
			
		||||
            self.fun
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user