@@ -65,52 +65,53 @@ def pytest_configure(config):
6565
6666
6767def wrap_function_parallel (fn , n_workers , n_iterations ):
68- barrier = threading .Barrier (n_workers )
69- original_switch = sys .getswitchinterval ()
70- sys .setswitchinterval (0.000001 )
71-
7268 @functools .wraps (fn )
7369 def inner (* args , ** kwargs ):
7470 errors = []
7571 skip = None
7672 failed = None
77-
78- def closure (* args , ** kwargs ):
79- for _ in range (n_iterations ):
80- barrier .wait ()
81- try :
82- fn (* args , ** kwargs )
83- except Warning :
84- pass
85- except Exception as e :
86- errors .append (e )
87- except _pytest .outcomes .Skipped as s :
88- nonlocal skip
89- skip = s .msg
90- except _pytest .outcomes .Failed as f :
91- nonlocal failed
92- failed = f
93-
94- workers = []
95- for _ in range (0 , n_workers ):
96- worker_kwargs = kwargs
97- workers .append (
98- threading .Thread (target = closure , args = args , kwargs = worker_kwargs )
99- )
100-
101- num_completed = 0
73+ barrier = threading .Barrier (n_workers )
74+ original_switch = sys .getswitchinterval ()
10275 try :
103- for worker in workers :
104- worker .start ()
105- num_completed += 1
106- finally :
107- if num_completed < len (workers ):
108- barrier .abort ()
76+ sys .setswitchinterval (0.000001 )
77+
78+ def closure (* args , ** kwargs ):
79+ for _ in range (n_iterations ):
80+ barrier .wait ()
81+ try :
82+ fn (* args , ** kwargs )
83+ except Warning :
84+ pass
85+ except Exception as e :
86+ errors .append (e )
87+ except _pytest .outcomes .Skipped as s :
88+ nonlocal skip
89+ skip = s .msg
90+ except _pytest .outcomes .Failed as f :
91+ nonlocal failed
92+ failed = f
93+
94+ workers = []
95+ for _ in range (0 , n_workers ):
96+ worker_kwargs = kwargs
97+ workers .append (
98+ threading .Thread (target = closure , args = args , kwargs = worker_kwargs )
99+ )
100+
101+ num_completed = 0
102+ try :
103+ for worker in workers :
104+ worker .start ()
105+ num_completed += 1
106+ finally :
107+ if num_completed < len (workers ):
108+ barrier .abort ()
109109
110- for worker in workers :
111- worker .join ()
110+ for worker in workers :
111+ worker .join ()
112112
113- sys .setswitchinterval (original_switch )
113+ finally :
114+ sys .setswitchinterval (original_switch )
114115
115116 if skip is not None :
116117 pytest .skip (skip )
0 commit comments