-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Closed
Labels
Description
Dear micropython developers,
this morning I found about micropython V1.22 and tried this on my Raspberry Pico (non W). But unfortunately I had to find out that my programs stop when the second thread is created.
consider this boot.py to reproduce the issue:
import _thread
import machine
import asyncio
from time import sleep, sleep_ms
async def thread1task():
print("thread 1 started")
while True:
print("thread 1 talking ... ")
await asyncio.sleep(1)
def thread2task():
print("thread 2 started")
while True:
print("thread 2 talking ... ")
sleep(1)
if __name__ == "__main__":
try:
loop = asyncio.get_event_loop()
messagestart = const(">> starting script in ... ")
print(messagestart + f"3")
sleep(1)
print(messagestart + f"2")
sleep(1)
print(messagestart + f"1")
sleep(1)
print(">> Loop is starting")
taskobj = loop.create_task(thread1task())
print(">> starting second thread...")
_thread.start_new_thread(thread2task,())
print(">> running loop ...")
loop.run_forever()
except KeyboardInterrupt:
loop.stop()
_thread.exit() # does not work, code hangs
print(f"INTERRUPTED")
The hangup is not always at the exact same spot, but the "most" debug output I could receive was:
MPY: soft reboot
>> starting script in ... 3
>> starting script in ... 2
>> starting script in ... 1
>> Loop is starting
>> starting second thread...
>> running loop ...thread 2 started
thread 2 talking ...
After that the serial port is blocked, device does not react to CTRL+C or any other keys.
Executing the code above with V1.21 has no issues and runs forever as expected.