我困住了一個棘手的問題來測試守護進程線程是否正在運行。該守護線程我做了應該在後臺保持運行的服務運行的,所以我下面要創建它,並讓它活着: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