В многопоточности Python только основной поток может принимать сигналы, а метод join()
блокирует основной поток и затем не может принимать сигналы
Итак, после того, как главный поток получил сигнал, как завершить (/ уничтожить) дочерний поток, находящийся в состоянии блокировки?
Следующая подпрограмма кода receive_task1
блокируется в функции os. read()
(получение последовательных данных, а данных еще не получено).
Есть ли способ разрешить os. read ()
выход функции?
Обычно, если os. read()
используется в основном потоке и Ctrl + C
может использоваться по умолчанию для прерывания, но как это лучше всего сделать сейчас?
import os
import signal
import threading
import time
def test(signum, frame):
print("\nreceived sig %d" % (signum))
print("how to make os.read(...) in rcv_task1 thread stop? ")
print("except use sys.exit(1)")
def receive_task1():
fd = os.open("/dev/ttyUSB1", os.O_RDWR)
os.read(fd, 10)
print("receive thread end")
signal.signal(signal.SIGINT, test)
rcv_task1 = threading.Thread(target=receive_task1)
rcv_task1.setDaemon(True)
rcv_task1.start()
while(1):
time.sleep(1)