バックグラウンドで入力信号を受信するエンドレススレッドをpython3.7で作りたいです。私のプログラムが停止するときに停止する必要があるため、メインが停止します。スレッドを daemon=True に設定しましたが、実行を続けます。その後、Daemon-state も確認しましたが、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
なぜ機能しないのか、問題を解決する方法はありますか?