Python 中如何结束子线程

Python019

Python 中如何结束子线程,第1张

等待串口数据导致线程自己sleep而没有机会执行,主线程的join没法继续,方法就是这样的,换成这个能执行

from threading import *import time class MyThread(Thread):def run (self):self.ifdo = True while self.ifdo:print 'I am running...'time.sleep(0.1) def stop (self):print 'I will stop it...'self.ifdo = False tr = MyThread()tr.setDaemon(True)tr.start()time.sleep(1)tr.stop()tr.join()

这样就更直观了

from threading import *import time class MyThread(Thread):def run (self):self.ifdo = True while self.ifdo:print 'I am running...'time.sleep(2) def stop (self):print 'I am stopping it...'self.ifdo = False tr = MyThread()tr.setDaemon(True)tr.start()print 'I will stop it...'time.sleep(5)tr.stop()tr.join()

等待串口数据导致线程自己sleep而没有机会执行,主线程的join没法继续,方法就是这样的,换成这个能执行

from threading import *import time class MyThread(Thread):def run (self):self.ifdo = True while self.ifdo:print 'I am running...'time.sleep(0.1) def stop (self):print 'I will stop it...'self.ifdo = False tr = MyThread()tr.setDaemon(True)tr.start()time.sleep(1)tr.stop()tr.join()

这样就更直观了

from threading import *import time class MyThread(Thread):def run (self):self.ifdo = True while self.ifdo:print 'I am running...'time.sleep(2) def stop (self):print 'I am stopping it...'self.ifdo = False tr = MyThread()tr.setDaemon(True)tr.start()print 'I will stop it...'time.sleep(5)tr.stop()tr.join()

join函数python就是把一个list中所有的串按照你定义的分隔符连接起来。

join是string类型的一个函数,用调用他的字符串去连接参数里的列表,python里面万物皆对象,调用join函数,将后面的列表里的值用逗号连接成新的字符串。str(i)foriinlist这是一个映射,就是把list中每个值都转换成字符串。

含义

python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出。

python对于thread的管理中有两个函数:join和setDaemon。

join:如在一个线程B中调用threada。join(),则threada结束后,线程B才会接着threada。join()往后运行。

setDaemon:主线程A启动了子线程B,调用b。setDaemaon(True),则主线程结束时,会把子线程B也杀死,与C/C++中得默认效果是一样的。