@@ -58,13 +58,13 @@ def test_shareable(self):
58
58
59
59
with self .subTest ('same interpreter' ):
60
60
queue2 = queues .create ()
61
- queue1 .put (queue2 )
61
+ queue1 .put (queue2 , sharedonly = True )
62
62
queue3 = queue1 .get ()
63
63
self .assertIs (queue3 , queue2 )
64
64
65
65
with self .subTest ('from current interpreter' ):
66
66
queue4 = queues .create ()
67
- queue1 .put (queue4 )
67
+ queue1 .put (queue4 , sharedonly = True )
68
68
out = _run_output (interp , dedent ("""
69
69
queue4 = queue1.get()
70
70
print(queue4.id)
@@ -75,7 +75,7 @@ def test_shareable(self):
75
75
with self .subTest ('from subinterpreter' ):
76
76
out = _run_output (interp , dedent ("""
77
77
queue5 = queues.create()
78
- queue1.put(queue5)
78
+ queue1.put(queue5, sharedonly=True )
79
79
print(queue5.id)
80
80
""" ))
81
81
qid = int (out )
@@ -118,7 +118,7 @@ class TestQueueOps(TestBase):
118
118
def test_empty (self ):
119
119
queue = queues .create ()
120
120
before = queue .empty ()
121
- queue .put (None )
121
+ queue .put (None , sharedonly = True )
122
122
during = queue .empty ()
123
123
queue .get ()
124
124
after = queue .empty ()
@@ -133,7 +133,7 @@ def test_full(self):
133
133
queue = queues .create (3 )
134
134
for _ in range (3 ):
135
135
actual .append (queue .full ())
136
- queue .put (None )
136
+ queue .put (None , sharedonly = True )
137
137
actual .append (queue .full ())
138
138
for _ in range (3 ):
139
139
queue .get ()
@@ -147,16 +147,16 @@ def test_qsize(self):
147
147
queue = queues .create ()
148
148
for _ in range (3 ):
149
149
actual .append (queue .qsize ())
150
- queue .put (None )
150
+ queue .put (None , sharedonly = True )
151
151
actual .append (queue .qsize ())
152
152
queue .get ()
153
153
actual .append (queue .qsize ())
154
- queue .put (None )
154
+ queue .put (None , sharedonly = True )
155
155
actual .append (queue .qsize ())
156
156
for _ in range (3 ):
157
157
queue .get ()
158
158
actual .append (queue .qsize ())
159
- queue .put (None )
159
+ queue .put (None , sharedonly = True )
160
160
actual .append (queue .qsize ())
161
161
queue .get ()
162
162
actual .append (queue .qsize ())
@@ -165,30 +165,81 @@ def test_qsize(self):
165
165
166
166
def test_put_get_main (self ):
167
167
expected = list (range (20 ))
168
- queue = queues .create ()
169
- for i in range (20 ):
170
- queue .put (i )
171
- actual = [queue .get () for _ in range (20 )]
168
+ for sharedonly in (True , False ):
169
+ kwds = dict (sharedonly = sharedonly )
170
+ with self .subTest (f'sharedonly={ sharedonly } ' ):
171
+ queue = queues .create ()
172
+ for i in range (20 ):
173
+ queue .put (i , ** kwds )
174
+ actual = [queue .get () for _ in range (20 )]
172
175
173
- self .assertEqual (actual , expected )
176
+ self .assertEqual (actual , expected )
174
177
175
178
def test_put_timeout (self ):
176
- queue = queues .create (2 )
177
- queue .put (None )
10000
178
- queue .put (None )
179
- with self .assertRaises (queues .QueueFull ):
180
- queue .put (None , timeout = 0.1 )
181
- queue .get ()
182
- queue .put (None )
179
+ for sharedonly in (True , False ):
180
+ kwds = dict (sharedonly = sharedonly )
181
+ with self .subTest (f'sharedonly={ sharedonly } ' ):
182
+ queue = queues .create (2 )
183
+ queue .put (None , ** kwds )
184
+ queue .put (None , ** kwds )
185
+ with self .assertRaises (queues .QueueFull ):
186
+ queue .put (None , timeout = 0.1 , ** kwds )
187
+ queue .get ()
188
+ queue .put (None , ** kwds )
183
189
184
190
def test_put_nowait (self ):
185
- queue = queues .create (2 )
186
- queue .put_nowait (None )
187
- queue .put_nowait (None )
188
- with self .assertRaises (queues .QueueFull ):
189
- queue .put_nowait (None )
190
- queue .get ()
191
- queue .put_nowait (None )
191
+ for sharedonly in (True , False ):
192
+ kwds = dict (sharedonly = sharedonly )
193
+ with self .subTest (f'sharedonly={ sharedonly } ' ):
194
+ queue = queues .create (2 )
195
+ queue .put_nowait (None , ** kwds )
196
+ queue .put_nowait (None , ** kwds )
197
+ with self .assertRaises (queues .QueueFull ):
198
+ queue .put_nowait (None , ** kwds )
199
+ queue .get ()
200
+ queue .put_nowait (None , ** kwds )
201
+
202
+ def test_put_sharedonly (self ):
203
+ for obj in [
204
+ None ,
205
+ True ,
206
+ 10 ,
207
+ 'spam' ,
208
+ b'spam' ,
209
+ (0 , 'a' ),
210
+ ]:
211
+ with self .subTest (repr (obj )):
212
+ queue = queues .create ()
213
+ queue .put (obj , sharedonly = True )
214
+ obj2 = queue .get ()
215
+ self .assertEqual (obj2 , obj )
216
+
217
+ for obj in [
218
+ [1 , 2 , 3 ],
219
+ {'a' : 13 , 'b' : 17 },
220
+ ]:
221
+ with self .subTest (repr (obj )):
222
+ queue = queues .create ()
223
+ with self .assertRaises (interpreters .NotShareableError ):
224
+ queue .put (obj , sharedonly = True )
225
+
226
+ def test_put_not_sharedonly (self ):
227
+ for obj in [
228
+ None ,
229
+ True ,
230
+ 10 ,
231
+ 'spam' ,
232
+ b'spam' ,
233
+ (0 , 'a' ),
234
+ # not shareable
235
+ [1 , 2 , 3 ],
236
+ {'a' : 13 , 'b' : 17 },
237
+ ]:
238
+ with self .subTest (repr (obj )):
239
+ queue = queues .create ()
240
+ queue .put (obj , sharedonly = False )
241
+ obj2 = queue .get ()
242
+ self .assertEqual (obj2 , obj )
192
243
193
244
def test_get_timeout (self ):
194
245
queue = queues .create ()
@@ -206,7 +257,7 @@ def test_put_get_same_interpreter(self):
206
257
from test.support.interpreters import queues
207
258
queue = queues.create()
208
259
orig = b'spam'
209
- queue.put(orig)
260
+ queue.put(orig, sharedonly=True )
210
261
obj = queue.get()
211
262
assert obj == orig, 'expected: obj == orig'
212
263
assert obj is not orig, 'expected: obj is not orig'
@@ -219,7 +270,7 @@ def test_put_get_different_interpreters(self):
219
270
self .assertEqual (len (queues .list_all ()), 2 )
220
271
221
272
obj1 = b'spam'
222
- queue1 .put (obj1 )
273
+ queue1 .put (obj1 , sharedonly = True )
223
274
224
275
out = _run_output (
225
276
interp ,
@@ -236,7 +287,7 @@ def test_put_get_different_interpreters(self):
236
287
obj2 = b'eggs'
237
288
print(id(obj2))
238
289
assert queue2.qsize() == 0, 'expected: queue2.qsize() == 0'
239
- queue2.put(obj2)
290
+ queue2.put(obj2, sharedonly=True )
240
291
assert queue2.qsize() == 1, 'expected: queue2.qsize() == 1'
241
292
""" ))
242
293
self .assertEqual (len (queues .list_all ()), 2 )
@@ -258,8 +309,8 @@ def test_put_cleared_with_subinterpreter(self):
258
309
queue = queues.Queue({ queue .id } )
259
310
obj1 = b'spam'
260
311
obj2 = b'eggs'
261
- queue.put(obj1)
262
- queue.put(obj2)
312
+ queue.put(obj1, sharedonly=True )
313
+ queue.put(obj2, sharedonly=True )
263
314
""" ))
264
315
self .assertEqual (queue .qsize (), 2 )
265
316
@@ -281,12 +332,12 @@ def f():
281
332
break
282
333
except queues .QueueEmpty :
283
334
continue
284
- queue2 .put (obj )
335
+ queue2 .put (obj , sharedonly = True )
285
336
t = threading .Thread (target = f )
286
337
t .start ()
287
338
288
339
orig = b'spam'
289
- queue1 .put (orig )
340
+ queue1 .put (orig , sharedonly = True )
290
341
obj = queue2 .get ()
291
342
t .join ()
292
343
0 commit comments