데몬 스레드가 실행 중인지 테스트하기가 까다로운 문제가 있습니다. 내가 만든 데몬 스레드는 서비스 실행을 유지하는 배경에서 실행해야합니다, 그래서 그것을 만들고 그것을 살아있는 유지하기 위해 다음을 수행하십시오파이썬 멀티 스레딩 : 데몬 스레드를 계속 실행하는 방법
창조 :
다음initAirserv()
방법 내부
ASThread = threading.Thread(target = initAirserv, args=[],)
ASThread.setDaemon(True)
ASThread.start()
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이 동일한 프로세스를 위해 여러 스레드에 적용되기 때문에 제 방식대로하지 말 것을 제안합니까? –
필자는 절대로 파이썬 전문가는 아닙니다. 나는 단지 GIL 제한을 파고들 것을 제안합니다. GIL 제한 사항은 지난 한 해 동안 Boston Python Meetup에서 논의되었으므로 그 이후로 상황이 변경되었을 수 있습니다. 나는 더 이상 그것에 대해 조사하지 않았다. 나는 좋은 언어이고 많은 지원을하기 때문에 여전히 많은 것을 위해 파이썬을 사용한다. – octopusgrabbus
이것이 OP의 질문에 어떻게 대답하는지 분명하지 않습니다. –