微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据 main_thread 的存在杀死一个线程

如何解决根据 main_thread 的存在杀死一个线程

我想用python3.7创建一个后台接收输入信号的无限线程。它应该在我的程序时停止,所以 main 停止了。 我将我的线程设置为 daemon=True 但它只是继续运行。之后我还检查了守护进程状态,结果为 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

有没有人有想法,为什么它不起作用以及如何解决我的问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?