From cb684cc0b44c532467542692116e409ace458b07 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Sun, 29 Dec 2019 08:46:28 -0800 Subject: [PATCH 1/2] Raise AssertionError if consumer closed in poll() --- kafka/consumer/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/kafka/consumer/group.py b/kafka/consumer/group.py index cde956c8d..bdf08947e 100644 --- a/kafka/consumer/group.py +++ b/kafka/consumer/group.py @@ -638,6 +638,7 @@ def poll(self, timeout_ms=0, max_records=None, update_offsets=True): max_records = self.config['max_poll_records'] assert isinstance(max_records, int), 'max_records must be an integer' assert max_records > 0, 'max_records must be positive' + assert not self._closed, 'KafkaConsumer is closed' # Poll for new data until the timeout expires start = time.time() From 65b343de9b30d7c50060d8d3264b3e96bdc7fee0 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Sun, 29 Dec 2019 12:52:51 -0800 Subject: [PATCH 2/2] StopIteration when consumer closed --- kafka/consumer/group.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kafka/consumer/group.py b/kafka/consumer/group.py index bdf08947e..bbdf20617 100644 --- a/kafka/consumer/group.py +++ b/kafka/consumer/group.py @@ -1174,6 +1174,8 @@ def __iter__(self): # pylint: disable=non-iterator-returned return self def __next__(self): + if self._closed: + raise StopIteration('KafkaConsumer closed') # Now that the heartbeat thread runs in the background # there should be no reason to maintain a separate iterator # but we'll keep it available for a few releases just in case