@@ -210,10 +210,15 @@ def test_put_syncobj(self):
210
210
]:
211
211
with self .subTest (repr (obj )):
212
212
queue = queues .create ()
213
+
213
214
queue .put (obj , syncobj = True )
214
215
obj2 = queue .get ()
215
216
self .assertEqual (obj2 , obj )
216
217
218
+ queue .put (obj , syncobj = True )
219
+ obj2 = queue .get_nowait ()
220
+ self .assertEqual (obj2 , obj )
221
+
217
222
for obj in [
218
223
[1 , 2 , 3 ],
219
224
{'a' : 13 , 'b' : 17 },
@@ -237,10 +242,15 @@ def test_put_not_syncobj(self):
237
242
]:
238
243
with self .subTest (repr (obj )):
239
244
queue = queues .create ()
245
+
240
246
queue .put (obj , syncobj = False )
241
247
obj2 = queue .get ()
242
248
self .assertEqual (obj2 , obj )
243
249
250
+ queue .put (obj , syncobj = False )
251
+ obj2 = queue .get_nowait ()
252
+ self .assertEqual (obj2 , obj )
253
+
244
254
def test_get_timeout (self ):
245
255
queue = queues .create ()
246
256
with self .assertRaises (queues .QueueEmpty ):
@@ -254,11 +264,13 @@ def test_get_nowait(self):
254
264
def test_put_get_default_syncobj (self ):
255
265
expected = list (range (20 ))
256
266
queue = queues .create (syncobj = True )
257
- for i in range (20 ):
258
- queue .put (i )
259
- actual = [queue .get () for _ in range (20 )]
260
-
261
- self .assertEqual (actual , expected )
267
+ for methname in ('get' , 'get_nowait' ):
268
+ with self .subTest (f'{ methname } ()' ):
269
+ get = getattr (queue , methname )
270
+ for i in range (20 ):
271
+ queue .put (i )
272
+ actual = [get () for _ in range (20 )]
273
+ self .assertEqual (actual , expected )
262
274
263
275
obj = [1 , 2 , 3 ] # lists are not shareable
264
276
with self .assertRaises (interpreters .NotShareableError ):
@@ -267,64 +279,74 @@ def test_put_get_default_syncobj(self):
267
279
def test_put_get_default_not_syncobj (self ):
268
280
expected = list (range (20 ))
269
281
queue = queues .create (syncobj = False )
270
- for i in range ( 20 ):
271
- queue . put ( i )
272
- actual = [ queue . get () for _ in range ( 20 )]
282
+ for methname in ( 'get' , 'get_nowait' ):
283
+ with self . subTest ( f' { methname } ()' ):
284
+ get = getattr ( queue , methname )
273
285
274
- self .assertEqual (actual , expected )
286
+ for i in range (20 ):
287
+ queue .put (i )
288
+ actual = [get () for _ in range (20 )]
289
+ self .assertEqual (actual , expected )
275
290
276
- obj = [1 , 2 , 3 ] # lists are not shareable
277
- queue .put (obj )
278
- obj2 = queue . get ()
279
- self .assertEqual (obj , obj2 )
280
- self .assertIsNot (obj , obj2 )
291
+ obj = [1 , 2 , 3 ] # lists are not shareable
292
+ queue .put (obj )
293
+ obj2 = get ()
294
+ self .assertEqual (obj , obj2 )
295
+ self .assertIsNot (obj , obj2 )
281
296
282
297
def test_put_get_same_interpreter (self ):
283
298
interp = interpreters .create ()
284
299
interp .exec (dedent ("""
285
300
from test.support.interpreters import queues
286
301
queue = queues.create()
287
- orig = b'spam'
288
- queue.put(orig, syncobj=True)
289
- obj = queue.get()
290
- assert obj == orig, 'expected: obj == orig'
291
- assert obj is not orig, 'expected: obj is not orig'
292
302
""" ))
303
+ for methname in ('get' , 'get_nowait' ):
304
+ with self .subTest (f'{ methname } ()' ):
305
+ interp .exec (dedent (f"""
306
+ orig = b'spam'
307
+ queue.put(orig, syncobj=True)
308
+ obj = queue.{ methname } ()
309
+ assert obj == orig, 'expected: obj == orig'
310
+ assert obj is not orig, 'expected: obj is not orig'
311
+ """ ))
293
312
294
313
def test_put_get_different_interpreters (self ):
295
314
interp = interpreters .create ()
296
315
queue1 = queues .create ()
297
316
queue2 = queues .create ()
298
317
self .assertEqual (len (queues .list_all ()), 2 )
299
318
300
- obj1 = b'spam'
301
- queue1 .put (obj1 , syncobj = True )
302
-
303
- out = _run_output (
304
- interp ,
305
- dedent (f"""
306
- from test.support.interpreters import queues
307
- queue1 = queues.Queue({ queue1 .id } )
308
- queue2 = queues.Queue({ queue2 .id } )
309
- assert queue1.qsize() == 1, 'expected: queue1.qsize() == 1'
310
- obj = queue1.get()
311
- assert queue1.qsize() == 0, 'expected: queue1.qsize() == 0'
312
- assert obj == b'spam', 'expected: obj == obj1'
313
- # When going to another interpreter we get a copy.
314
- assert id(obj) != { id (obj1 )} , 'expected: obj is not obj1'
315
- obj2 = b'eggs'
316
- print(id(obj2))
317
- assert queue2.qsize() == 0, 'expected: queue2.qsize() == 0'
318
- queue2.put(obj2, syncobj=True)
319
- assert queue2.qsize() == 1, 'expected: queue2.qsize() == 1'
320
- """ ))
321
- self .assertEqual (len (queues .list_all ()), 2 )
322
- self .assertEqual (queue1 .qsize (), 0 )
323
- self .assertEqual (queue2 .qsize (), 1 )
324
-
325
- obj2 = queue2 .get ()
326
- self .assertEqual (obj2 , b'eggs' )
327
- self .assertNotEqual (id (obj2 ), int (out ))
319
+ for methname in ('get' , 'get_nowait' ):
320
+ with self .subTest (f'{ methname } ()' ):
321
+ obj1 = b'spam'
322
+ queue1 .put (obj1 , syncobj = True )
323
+
324
+ out = _run_output (
325
+ interp ,
326
+ dedent (f"""
327
+ from test.support.interpreters import queues
328
+ queue1 = queues.Queue({ queue1 .id } )
329
+ queue2 = queues.Queue({ queue2 .id } )
330
+ assert queue1.qsize() == 1, 'expected: queue1.qsize() == 1'
331
+ obj = queue1.{ methname } ()
332
+ assert queue1.qsize() == 0, 'expected: queue1.qsize() == 0'
333
+ assert obj == b'spam', 'expected: obj == obj1'
334
+ # When going to another interpreter we get a copy.
335
+ assert id(obj) != { id (obj1 )} , 'expected: obj is not obj1'
336
+ obj2 = b'eggs'
337
+ print(id(obj2))
338
+ assert queue2.qsize() == 0, 'expected: queue2.qsize() == 0'
339
+ queue2.put(obj2, syncobj=True)
340
+ assert queue2.qsize() == 1, 'expected: queue2.qsize() == 1'
341
+ """ ))
342
+ self .assertEqual (len (queues .list_all ()), 2 )
343
+ self .assertEqual (queue1 .qsize (), 0 )
344
+ self .assertEqual (queue2 .qsize (), 1 )
345
+
346
+ get = getattr (queue2 , methname )
347
+ obj2 = get ()
348
+ self .assertEqual (obj2 , b'eggs' )
349
+ self .assertNotEqual (id (obj2 ), int (out ))
328
350
329
351
def test_put_cleared_with_subinterpreter (self ):
330
352
interp = interpreters .create ()
0 commit comments