我困住了一个棘手的问题来测试守护进程线程是否正在运行。该守护线程我做了应该在后台保持运行的服务运行的,所以我下面要创建它,并让它活着:Python多线程:如何让守护进程线程运行
创作:
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
的身体是否永远不会被执行。有人可以向我解释为什么会发生这种情况?运行线程的最佳方式是执行一些需要一直忙碌的事情?非常感谢。
感谢您的信息。你是否暗示,因为GIL适用于多个线程的同一过程,我不应该这样做吗? – 2012-03-21 18:16:43
我绝不是Python专家。我只是建议你只做一些挖掘GIL的限制。在去年的波士顿Python Meetup会议上讨论了GIL限制,因此事情可能会发生变化。我没有进一步研究过它。我仍然使用Python来做很多事情,因为它是一门很好的语言,并且有很多支持。 – octopusgrabbus 2012-03-21 18:36:11
我不清楚这是如何回答OP的问题。 – 2012-03-21 18:51:07