diff --git a/kafka/conn.py b/kafka/conn.py index ddfee8bb7..6db2c5618 100644 --- a/kafka/conn.py +++ b/kafka/conn.py @@ -38,7 +38,21 @@ def collect_hosts(hosts, randomize=True): return result -class KafkaConnection(local): +class ConnectionBaseClass(type): + """ + Metaclass to make KafkaConnection work with gevent. + """ + def __new__(mcs, name, bases, attrs): + if local.__module__ == 'gevent.local': + # change base to object to avoid using one connection per greenlet + bases = (object,) + else: + bases = (local,) + + return type(name, bases, attrs) + + +class KafkaConnection(six.with_metaclass(ConnectionBaseClass)): """ A socket connection to a single Kafka broker