diff options
author | Marko Kreen | 2011-02-23 11:49:15 +0000 |
---|---|---|
committer | Marko Kreen | 2011-02-23 11:49:15 +0000 |
commit | e651af3827a54c55919f4152c72ca0133f96defd (patch) | |
tree | a747e172ca08c58c854fdaef07afa1b6b2f11604 | |
parent | 28a95618202289896502c505bd164446c2698f7e (diff) |
CoopConsumer: subconsumer_timeout config param
-rw-r--r-- | python/pgq/coopconsumer.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/python/pgq/coopconsumer.py b/python/pgq/coopconsumer.py index 3e6cdec8..5f1a9a1c 100644 --- a/python/pgq/coopconsumer.py +++ b/python/pgq/coopconsumer.py @@ -10,6 +10,16 @@ class CoopConsumer(Consumer): """Cooperative Consumer base class. There will be one dbscript process per subconsumer. + + Config params:: + ## pgq.CoopConsumer + + # name for subconsumer + subconsumer_name = + + # pgsql interval when to consider parallel subconsumers dead, + # and take over their unfinished batch + #subconsumer_timeout = 1 hour """ def __init__(self, service_name, db_name, args): @@ -23,6 +33,7 @@ class CoopConsumer(Consumer): Consumer.__init__(self, service_name, db_name, args) self.subconsumer_name = self.cf.get("subconsumer_name") + self.subconsumer_timeout = self.cf.get("subconsumer_timeout") def register_consumer(self): """Registration for subconsumer.""" @@ -51,8 +62,12 @@ class CoopConsumer(Consumer): def _load_next_batch(self, curs): """Allocate next batch. (internal)""" - q = "select pgq_coop.next_batch(%s, %s, %s)" - curs.execute(q, [self.queue_name, self.consumer_name, self.subconsumer_name]) + if self.subconsumer_timeout: + q = "select pgq_coop.next_batch(%s, %s, %s, %s)" + curs.execute(q, [self.queue_name, self.consumer_name, self.subconsumer_name, self.subconsumer_timeout]) + else: + q = "select pgq_coop.next_batch(%s, %s, %s)" + curs.execute(q, [self.queue_name, self.consumer_name, self.subconsumer_name]) return curs.fetchone()[0] def _finish_batch(self, curs, batch_id, list): |