@@ -317,38 +317,39 @@ def test_shutdown_all_methods_in_one_thread(self):
317317 def test_shutdown_immediate_all_methods_in_one_thread (self ):
318318 return self ._shutdown_all_methods_in_one_thread (True )
319319
320- def _write_msg_thread (self , q , n , results , delay ,
321- i_when_exec_shutdown ,
322- event_start , event_end ):
323- event_start . wait ()
320+ def _write_msg_thread (self , q , n , results ,
321+ i_when_exec_shutdown , event_shutdown ,
322+ event_start ):
323+ put_atleast = i_when_exec_shutdown // 2
324324 for i in range (1 , n + 1 ):
325325 try :
326326 q .put ((i , "YDLO" ))
327- results .append (True )
328327 except self .queue .ShutDown :
329328 results .append (False )
330- # triggers shutdown of queue
329+ break
330+
331+ # Be sure that all write_threads
332+ # put few items into the queue.
333+ if i == put_atleast :
334+ event_start .wait ()
335+
336+ # Triggers shutdown of queue.
331337 if i == i_when_exec_shutdown :
332- event_end . set ()
333- time . sleep ( delay )
334- # end of all puts
338+ if not event_shutdown . is_set ():
339+ event_shutdown . set ( )
340+ results . append ( True )
335341 q .join ()
336342
337- def _read_msg_thread (self , q , nb , results , delay , event_start ):
338- event_start .wait ()
339- block = True
340- while nb :
341- time .sleep (delay )
343+ def _read_msg_thread (self , q , results , event_start ):
344+ nbr = 0
345+ while True :
342346 try :
343- # Get at least one message
344- q .get (block )
345- block = False
347+ q .get (False )
346348 q .task_done ()
347- results .append (True )
348- nb -= 1
349+ nbr += 1
349350 except self .queue .ShutDown :
350- results .append (False )
351- nb -= 1
351+ results .append (True )
352+ break
352353 except self .queue .Empty :
353354 pass
354355 q .join ()
@@ -358,9 +359,8 @@ def _shutdown_thread(self, q, event_end, immediate):
358359 q .shutdown (immediate )
359360 q .join ()
360361
361- def _join_thread (self , q , delay , event_start ):
362+ def _join_thread (self , q , event_start ):
362363 event_start .wait ()
363- time .sleep (delay )
364364 q .join ()
365365
366366 def _shutdown_all_methods_in_many_threads (self , immediate ):
@@ -370,44 +370,35 @@ def _shutdown_all_methods_in_many_threads(self, immediate):
370370 ev_exec_shutdown = threading .Event ()
371371 res_puts = []
372372 res_gets = []
373- delay = 1e- 4
374- read_process = 4
375- nb_msgs = read_process * 16
376- nb_msgs_r = nb_msgs // read_process
377- when_exec_shutdown = nb_msgs // 2
373+ write_threads = 4
374+ read_threads = 16
375+ nb_msgs = 1024 * 4
376+ nb_msgs_w = nb_msgs // write_threads
377+ when_exec_shutdown = nb_msgs_w // 2
378378 lprocs = (
379- (self ._write_msg_thread , 1 , (q , nb_msgs , res_puts , delay ,
380- when_exec_shutdown ,
381- ev_start , ev_exec_shutdown )),
382- (self ._read_msg_thread , read_process , (q , nb_msgs_r ,
383- res_gets , delay * 2 ,
379+ (self ._write_msg_thread , write_threads , (q , nb_msgs_w , res_puts ,
380+ when_exec_shutdown , ev_exec_shutdown ,
381+ ev_start )),
382+ (self ._read_msg_thread , read_threads , (q , res_gets ,
384383 ev_start )),
385- (self ._join_thread , 2 , (q , delay * 2 , ev_start )),
384+ (self ._join_thread , 2 , (q , ev_start )),
386385 (self ._shutdown_thread , 1 , (q , ev_exec_shutdown , immediate )),
387386 )
388- # start all threds
387+ # start all thredas
389388 for func , n , args in lprocs :
390389 for i in range (n ):
391390 ps .append (threading .Thread (target = func , args = args ))
392391 ps [- 1 ].start ()
393- # set event in order to run q.shutdown()
394392 ev_start .set ()
395-
396- if not immediate :
397- assert (len (res_gets ) == len (res_puts ))
398- assert (res_gets .count (True ) == res_puts .count (True ))
399- else :
400- assert (len (res_gets ) <= len (res_puts ))
401- assert (res_gets .count (True ) <= res_puts .count (True ))
402-
403- for thread in ps [1 :]:
393+ for thread in ps :
404394 thread .join ()
405395
406- @unittest .skip ("test times out (gh-115258)" )
396+ self .assertEqual (res_puts .count (True ), 1 )
397+ self .assertLessEqual (res_gets .count (True ), read_threads )
398+
407399 def test_shutdown_all_methods_in_many_threads (self ):
408400 return self ._shutdown_all_methods_in_many_threads (False )
409401
410- @unittest .skip ("test times out (gh-115258)" )
411402 def test_shutdown_immediate_all_methods_in_many_threads (self ):
412403 return self ._shutdown_all_methods_in_many_threads (True )
413404
0 commit comments