@@ -200,18 +200,22 @@ def __init__(self, **configs):
200
200
if key in configs :
201
201
self .config [key ] = configs [key ]
202
202
203
+ # these properties need to be set on top of the initialization pipeline
204
+ # because they are used when __del__ method is called
205
+ self ._closed = False
206
+ self ._wake_r , self ._wake_w = socket .socketpair ()
207
+ self ._selector = self .config ['selector' ]()
208
+
203
209
self .cluster = ClusterMetadata (** self .config )
204
210
self ._topics = set () # empty set will fetch all topic metadata
205
211
self ._metadata_refresh_in_progress = False
206
- self ._selector = self .config ['selector' ]()
207
212
self ._conns = Dict () # object to support weakrefs
208
213
self ._api_versions = None
209
214
self ._connecting = set ()
210
215
self ._sending = set ()
211
216
self ._refresh_on_disconnects = True
212
217
self ._last_bootstrap = 0
213
218
self ._bootstrap_fails = 0
214
- self ._wake_r , self ._wake_w = socket .socketpair ()
215
219
self ._wake_r .setblocking (False )
216
220
self ._wake_w .settimeout (self .config ['wakeup_timeout_ms' ] / 1000.0 )
217
221
self ._wake_lock = threading .Lock ()
@@ -225,7 +229,6 @@ def __init__(self, **configs):
225
229
226
230
self ._selector .register (self ._wake_r , selectors .EVENT_READ )
227
231
self ._idle_expiry_manager = IdleConnectionManager (self .config ['connections_max_idle_ms' ])
228
- self ._closed = False
229
232
self ._sensors = None
230
233
if self .config ['metrics' ]:
231
234
self ._sensors = KafkaClientMetrics (self .config ['metrics' ],
0 commit comments