@@ -148,102 +148,60 @@ def read_set():
148148 for t in threads :
149149 t .join ()
150150
151+ @threading_helper .reap_threads
151152 def test_length_hint_used_race (self ):
152- s = set (range (2000 ))
153- it = iter (s )
154-
155- NUM_LOOPS = 50_000
156- barrier = Barrier (2 )
153+ NUM_ITERS = 10
154+ NUM_THREADS = 10
155+ NUM_LOOPS = 2_000
157156
158- def reader ():
159- barrier .wait ()
160- for _ in range (NUM_LOOPS ):
161- it .__length_hint__ ()
157+ for _ in range (NUM_ITERS ):
158+ s = set (range (2000 ))
159+ it = iter (s )
162160
163- def writer ():
164- barrier .wait ()
165- i = 0
166- for _ in range (NUM_LOOPS ):
167- s .add (i )
168- s .discard (i - 1 )
169- i += 1
161+ def worker ():
162+ for i in range (NUM_LOOPS ):
163+ it .__length_hint__ ()
164+ s .add (i )
165+ s .discard (i - 1 )
170166
171- threads = [
172- Thread (target = reader ),
173- Thread (target = writer ),
174- ]
175- for t in threads :
176- t .start ()
177- for t in threads :
178- t .join ()
167+ threading_helper .run_concurrently (worker , nthreads = NUM_THREADS )
179168
169+ @threading_helper .reap_threads
180170 def test_length_hint_exhaust_race (self ):
181- NUM_LOOPS = 10_000
182- INNER_HINTS = 20
183- barrier = Barrier (2 )
184- box = {"it" : None }
171+ NUM_ITERS = 50
172+ NUM_THREADS = 10
185173
186- def exhauster ():
187- for _ in range (NUM_LOOPS ):
188- s = set (range (256 ))
189- box ["it" ] = iter (s )
190- barrier .wait () # start together
191- try :
192- while True :
193- next (box ["it" ])
194- except StopIteration :
195- pass
196- barrier .wait () # end iteration
197-
198- def reader ():
199- for _ in range (NUM_LOOPS ):
200- barrier .wait ()
201- it = box ["it" ]
202- for _ in range (INNER_HINTS ):
174+ for _ in range (NUM_ITERS ):
175+ s = set (range (256 ))
176+ it = iter (s )
177+
178+ def worker ():
179+ while True :
203180 it .__length_hint__ ()
204- barrier .wait ()
181+ try :
182+ next (it )
183+ except StopIteration :
184+ break
205185
206- threads = [
207- Thread (target = reader ),
208- Thread (target = exhauster ),
209- ]
210- for t in threads :
211- t .start ()
212- for t in threads :
213- t .join ()
186+ threading_helper .run_concurrently (worker , nthreads = NUM_THREADS )
214187
188+ @threading_helper .reap_threads
215189 def test_iternext_concurrent_exhaust_race (self ):
216- NUM_LOOPS = 20_000
217- barrier = Barrier (3 )
218- box = {"it" : None }
190+ NUM_ITERS = 200
191+ NUM_THREADS = 10
219192
220- def advancer ():
221- for _ in range (NUM_LOOPS ):
222- barrier .wait ()
223- it = box ["it" ]
193+ for _ in range (NUM_ITERS ):
194+ s = set (range (64 ))
195+ it = iter (s )
196+
197+ def worker ():
224198 while True :
225199 try :
226200 next (it )
227201 except StopIteration :
228202 break
229- barrier .wait ()
230203
231- def producer ():
232- for _ in range (NUM_LOOPS ):
233- s = set (range (64 ))
234- box ["it" ] = iter (s )
235- barrier .wait ()
236- barrier .wait ()
237-
238- threads = [
239- Thread (target = advancer ),
240- Thread (target = advancer ),
241- Thread (target = producer ),
242- ]
243- for t in threads :
244- t .start ()
245- for t in threads :
246- t .join ()
204+ threading_helper .run_concurrently (worker , nthreads = NUM_THREADS )
247205
248206
249207@threading_helper .requires_working_threading ()
0 commit comments