summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2011-02-23 11:49:15 +0000
committerMarko Kreen2011-02-23 11:49:15 +0000
commite651af3827a54c55919f4152c72ca0133f96defd (patch)
treea747e172ca08c58c854fdaef07afa1b6b2f11604
parent28a95618202289896502c505bd164446c2698f7e (diff)
CoopConsumer: subconsumer_timeout config param
-rw-r--r--python/pgq/coopconsumer.py19
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):