@@ -53,6 +53,8 @@ def __init__(self, maxsize=0, *, loop=None):
5353 self ._finished .set ()
5454 self ._init (maxsize )
5555
56+ # These three are overridable in subclasses.
57+
5658 def _init (self , maxsize ):
5759 self ._queue = collections .deque ()
5860
@@ -61,6 +63,11 @@ def _get(self):
6163
6264 def _put (self , item ):
6365 self ._queue .append (item )
66+
67+ # End of the overridable methods.
68+
69+ def __put_internal (self , item ):
70+ self ._put (item )
6471 self ._unfinished_tasks += 1
6572 self ._finished .clear ()
6673
@@ -132,7 +139,7 @@ def put(self, item):
132139 'queue non-empty, why are getters waiting?' )
133140
134141 getter = self ._getters .popleft ()
135- self ._put (item )
142+ self .__put_internal (item )
136143
137144 # getter cannot be cancelled, we just removed done getters
138145 getter .set_result (self ._get ())
@@ -144,7 +151,7 @@ def put(self, item):
144151 yield from waiter
145152
146153 else :
147- self ._put (item )
154+ self .__put_internal (item )
148155
149156 def put_nowait (self , item ):
150157 """Put an item into the queue without blocking.
@@ -157,15 +164,15 @@ def put_nowait(self, item):
157164 'queue non-empty, why are getters waiting?' )
158165
159166 getter = self ._getters .popleft ()
160- self ._put (item )
167+ self .__put_internal (item )
161168
162169 # getter cannot be cancelled, we just removed done getters
163170 getter .set_result (self ._get ())
164171
165172 elif self ._maxsize > 0 and self ._maxsize <= self .qsize ():
166173 raise QueueFull
167174 else :
168- self ._put (item )
175+ self .__put_internal (item )
169176
170177 @coroutine
171178 def get (self ):
@@ -179,7 +186,7 @@ def get(self):
179186 if self ._putters :
180187 assert self .full (), 'queue not full, why are putters waiting?'
181188 item , putter = self ._putters .popleft ()
182- self ._put (item )
189+ self .__put_internal (item )
183190
184191 # When a getter runs and frees up a slot so this putter can
185192 # run, we need to defer the put for a tick to ensure that
@@ -206,7 +213,7 @@ def get_nowait(self):
206213 if self ._putters :
207214 assert self .full (), 'queue not full, why are putters waiting?'
208215 item , putter = self ._putters .popleft ()
209- self ._put (item )
216+ self .__put_internal (item )
210217 # Wake putter on next tick.
211218
212219 # getter cannot be cancelled, we just removed done putters
0 commit comments