diff options
| author | Damien George <damien@micropython.org> | 2025-07-13 22:49:15 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2025-07-23 11:37:00 +1000 |
| commit | b070765427283fd994f217b8c7601ef9b1f9a37a (patch) | |
| tree | b0977907d1a1267348e75da512f8c3b68a476f49 /tests/thread/stress_schedule.py | |
| parent | b15065b95e24a939e09289ee18ce84579605b929 (diff) | |
tests/thread: Allow thread tests to pass with the native emitter.
The native emitter will not release/bounce the GIL when running code, so
if it runs tight loops then no other threads get a chance to run (if the
GIL is enabled). So for the thread tests, explicitly include a call to
`time.sleep(0)` (or equivalent) to bounce the GIL and give other threads a
chance to run.
For some tests (eg `thread_coop.py`) the whole point of the test is to test
that the GIL is correctly bounced. So for those cases force the use of the
bytecode emitter for the busy functions.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests/thread/stress_schedule.py')
| -rw-r--r-- | tests/thread/stress_schedule.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/tests/thread/stress_schedule.py b/tests/thread/stress_schedule.py index 97876f0f7..362d71aa1 100644 --- a/tests/thread/stress_schedule.py +++ b/tests/thread/stress_schedule.py @@ -27,6 +27,8 @@ def task(x): n += 1 +# This function must always use the bytecode emitter so it bounces the GIL when running. +@micropython.bytecode def thread(): while thread_run: try: @@ -46,7 +48,7 @@ for i in range(8): # Wait up to 10 seconds for 10000 tasks to be scheduled. t = time.ticks_ms() while n < _NUM_TASKS and time.ticks_diff(time.ticks_ms(), t) < _TIMEOUT_MS: - pass + time.sleep(0) # Stop all threads. thread_run = False |
