diff -r f768a3529ee7 -r a9e12b7cc207 pgtoolkit/delayedquery.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pgtoolkit/delayedquery.py Fri Nov 25 18:17:27 2011 +0100 @@ -0,0 +1,46 @@ +import threading +import time + + +class DelayedQueryThread(threading.Thread): + def __init__(self, targetdbm, targetname, delay, query, args): + threading.Thread.__init__(self) + self.targetdbm = targetdbm + self.targetname = targetname + self.delay = delay + self.query = query + self.args = args + + def run(self): + time.sleep(self.delay) + with self.targetdbm.cursor(self.targetname) as curs: + curs.execute(self.query, self.args) + + +class DelayedQuery: + def __init__(self, targetdbm): + '''Initialize DelayedQuery. + + targetdbm -- PgManager-like object + + ''' + self.targetdbm = targetdbm + self.queryids = set() + + def add(self, delay, query, args, targetname='default', queryid=None): + '''Add query to schedule. + + delay -- how long to wait, in seconds + query, args -- query to be run after delay + targetname -- name of connection in PgManager + queryid -- discard if query with same id is already scheduled + + ''' + if queryid is not None: + if queryid in self.queryids: + return + self.queryids.add(queryid) + + t = DelayedQueryThread(self.targetdbm, targetname, delay, query, args) + t.start() +