rev120, Cleanup expired RateLimits to avoid memory leak

This commit is contained in:
HelloZeroNet 2015-04-24 14:04:51 +02:00
parent f7717b1de8
commit c025503264
2 changed files with 20 additions and 4 deletions

View File

@ -4,7 +4,7 @@ import ConfigParser
class Config(object):
def __init__(self):
self.version = "0.2.9"
self.rev = 119
self.rev = 120
self.parser = self.createArguments()
argv = sys.argv[:] # Copy command line arguments
argv = self.parseConfig(argv) # Add arguments from config file

View File

@ -4,8 +4,8 @@ import logging
log = logging.getLogger("RateLimit")
called_db = {}
queue_db = {}
called_db = {} # Holds events last call time
queue_db = {} # Commands queued to run
# Register event as called
# Return: None
@ -75,6 +75,16 @@ def call(event, allowed_again=10, func=None, *args, **kwargs):
return back
# Cleanup expired events every 3 minutes
def cleanup():
while 1:
expired = time.time()-60*2 # Cleanup if older than 2 minutes
for event in called_db.keys():
if called_db[event] < expired:
del called_db[event]
time.sleep(60*3) # Every 3 minutes
gevent.spawn(cleanup)
if __name__ == "__main__":
from gevent import monkey
@ -103,4 +113,10 @@ if __name__ == "__main__":
time.sleep(float(random.randint(1,100))/100)
print "Done"
print called_db, queue_db
print "Testing cleanup"
thread = callAsync("publish content.json single", 1, publish, "content.json single")
print "Needs to cleanup:", called_db, queue_db
print "Waiting 3min for cleanup process..."
time.sleep(60*3)
print "Cleaned up:", called_db, queue_db