我想用python3.7创建一个在后台接收输入信号的无限线程。它应该在我的程序停止时停止,所以 main 停止。我将我的线程设置为 daemon=True 但它只是继续运行。之后我还检查了守护进程状态,它是真的。
当我定期检查我的线程时,如果主线程仍然处于活动状态,并且在没有时尝试停止它,也会出现同样的问题。main_thread 将始终被视为活动的。
这是我的两种可能性的代码。main 中的输入只是我可以在需要时停止主程序。
import threading
import serial as s
port = "/dev/ttyS0" #Pi 2
rounds_receiving = 24
ser = s.Serial(port, baudrate = 230400) #default: parity = s.PARITY_NONE, stopbits = s.STOPBITS_ONE, bytesize = s.EIGHTBITS
received_data_original = []
def receive_data(length_receiving_max):
for i in range(3):
global received_data_original
received_data_original = ser.read(length_receiving_max)
for i in range(length_receiving_max):
print('%d: %s'%(i, received_data_original[i]))
if(threading.main_thread().is_alive()):
print('main is alive')
else:
x.join()
print('main killed')
if __name__ == "__main__":
x = threading.Thread(target=receive_data, args=(rounds_receiving, ), daemon = True)
if(threading.main_thread().is_alive()):
print('main alive')
x.start()
inp = input()
这是我通过写入“0”停止主程序并输入输入后的输出:
...
21: 0
22: 136
23: 191
main is alive
0
0: 255
1: 0
2: 2
3: 244
4: 88
5: 156
6: 55
7: 4
8: 0
9: 0
10: 0
11: 0
12: 0
13: 0
14: 0
15: 0
16: 0
17: 0
18: 0
19: 0
20: 0
21: 0
22: 136
23: 191
main is alive
有没有人有一个想法,为什么它不起作用以及如何解决我的问题?