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>
33 lines
741 B
Python
33 lines
741 B
Python
# test _thread.get_ident() function
|
|
#
|
|
# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd
|
|
|
|
import time
|
|
import _thread
|
|
|
|
|
|
# Initialise variables (also preallocate their spot in the globals dict so the
|
|
# globals dict is not resized while threads are running).
|
|
tid = None
|
|
tid_main = None
|
|
new_tid = None
|
|
finished = False
|
|
|
|
|
|
def thread_entry():
|
|
global tid
|
|
tid = _thread.get_ident()
|
|
print("thread", type(tid) == int, tid != 0, tid != tid_main)
|
|
global finished
|
|
finished = True
|
|
|
|
|
|
tid_main = _thread.get_ident()
|
|
print("main", type(tid_main) == int, tid_main != 0)
|
|
|
|
new_tid = _thread.start_new_thread(thread_entry, ())
|
|
|
|
while not finished:
|
|
time.sleep(0)
|
|
|
|
print("done", type(new_tid) == int, new_tid == tid)
|