我遇到了一个棘手的问题来测试守护线程是否正在运行。我创建的守护线程应该在后台运行以保持服务运行,因此我执行以下操作来创建它并使其保持活动状态:
创建:
ASThread = threading.Thread(target = initAirserv, args=[],)
ASThread.setDaemon(True)
ASThread.start()
方法内部initAirserv()
:
def initAirserv(self, channel="15"):
interface = self.execAirmon(options="start", interface=self.interface)
port = self.plug_port
if interface != "removed":
if channel=="15":
command = "airserv-ng -d " +str(interface)+" -p "+str(port)
else:
command = "airserv-ng -d " +str(interface)+" -p "+str(port)+" -c"+str(channel)
else:
return None
AServConn=self.init_Plug()
if AServConn:
(stdin, stdout, stderr) = AServConn.exec_command(command)
serv_op = stdout
serv_er = stderr
##### keep the daemon thread run persistently ####
a = 0
while 1:
a += 1
else:
logging.debug( "SSH Error" )
最后几行的目的是用一种愚蠢的方式让线程保持忙碌。然而,在启动了这个守护线程之后,我做了别的事情,当我回来检查线程时,如下所示:
if ASThread.is_alive() == 1:
# do something
if 主体永远不会被执行。有人可以向我解释为什么会这样吗?运行一个执行需要一直忙的事情的线程的最佳方法是什么?非常感谢。