@@ -134,19 +134,22 @@ def test_run_concurrently_sequence(are_subshells, overlap):
134
134
for is_subshell in are_subshells
135
135
]
136
136
137
- # Import time module before running time-sensitive subshell code.
138
- execute_request_subshell_id (kc , "import time; print('ok')" , None )
137
+ # Import time module before running time-sensitive subshell code
138
+ # and use threading.Barrier to synchronise start of subshell code.
139
+ execute_request_subshell_id (
140
+ kc , "import threading as t, time; b=t.Barrier(2); print('ok')" , None
141
+ )
139
142
140
143
sleep = 0.2
141
144
if overlap :
142
145
codes = [
143
- f"start0=True; end0=False; time.sleep({ sleep } ); end0=True" ,
144
- f"time.sleep({ sleep / 2 } ); assert start0; assert not end0; time.sleep({ sleep } ); assert end0" ,
146
+ f"b.wait(); start0=True; end0=False; time.sleep({ sleep } ); end0=True" ,
147
+ f"b.wait(); time.sleep({ sleep / 2 } ); assert start0; assert not end0; time.sleep({ sleep } ); assert end0" ,
145
148
]
146
149
else :
147
150
codes = [
148
- f"start0=True; end0=False; time.sleep({ sleep } ); assert end1" ,
149
- f"time.sleep({ sleep / 2 } ); assert start0; assert not end0; end1=True" ,
151
+ f"b.wait(); start0=True; end0=False; time.sleep({ sleep } ); assert end1" ,
152
+ f"b.wait(); time.sleep({ sleep / 2 } ); assert start0; assert not end0; end1=True" ,
150
153
]
151
154
152
155
msgs = []
@@ -174,16 +177,19 @@ def test_run_concurrently_timing(include_main_shell):
174
177
create_subshell_helper (kc )["subshell_id" ],
175
178
]
176
179
177
- # Import time module before running time-sensitive subshell code.
178
- execute_request_subshell_id (kc , "import time; print('ok')" , None )
180
+ # Import time module before running time-sensitive subshell code
181
+ # and use threading.Barrier to synchronise start of subshell code.
182
+ execute_request_subshell_id (
183
+ kc , "import threading as t, time; b=t.Barrier(2); print('ok')" , None
184
+ )
179
185
180
186
times = (0.2 , 0.2 )
181
187
# Prepare messages, times are sleep times in seconds.
182
188
# Identical times for both subshells is a harder test as preparing and sending
183
189
# the execute_reply messages may overlap.
184
190
msgs = []
185
191
for id , sleep in zip (subshell_ids , times ):
186
- code = f"time.sleep({ sleep } )"
192
+ code = f"b.wait(); time.sleep({ sleep } )"
187
193
msg = kc .session .msg ("execute_request" , {"code" : code })
188
194
msg ["header" ]["subshell_id" ] = id
189
195
msgs .append (msg )
@@ -213,11 +219,17 @@ def test_execution_count():
213
219
with new_kernel () as kc :
214
220
subshell_id = create_subshell_helper (kc )["subshell_id" ]
215
221
222
+ # Import time module before running time-sensitive subshell code
223
+ # and use threading.Barrier to synchronise start of subshell code.
224
+ execute_request_subshell_id (
225
+ kc , "import threading as t, time; b=t.Barrier(2); print('ok')" , None
226
+ )
227
+
216
228
# Prepare messages
217
229
times = (0.2 , 0.1 , 0.4 , 0.15 ) # Sleep seconds
218
230
msgs = []
219
- for id , sleep in zip ((None , subshell_id , None , subshell_id ), times ):
220
- code = f"import time; time.sleep({ sleep } )"
231
+ for i , ( id , sleep ) in enumerate ( zip ((None , subshell_id , None , subshell_id ), times ) ):
232
+ code = f"b.wait(); time.sleep( { sleep } )" if i < 2 else f" time.sleep({ sleep } )"
221
233
msg = kc .session .msg ("execute_request" , {"code" : code })
222
234
msg ["header" ]["subshell_id" ] = id
223
235
msgs .append (msg )
0 commit comments