2016-08-29 1 views
0

이 스크립트를 사용하여 수천 개의 도메인을 해결합니다. 성공적으로 실행되고 큐가 비어 있으면 종료됩니다. 루프에서 빠져 나와 스크립트로 인쇄를 계속하려고 노력 중입니다.대기열이 성공적으로 실행됩니다! 계속 대신 중단 후 종료

대기열이 비어있을 때이 코드를 루프에서 빠져 나오게하려면 어떻게해야합니까?

q = queue.Queue() 
for name in names: 
    q.put(name) 

def async_dns(): 
    s = adns.init() 

    while True: 
     try: 
      dname = q.get(False) 
      q.task_done() 
     except queue.Empty: 
      return 
     response = s.synchronous(dname,adns.rr.NS)[0] 
     if response == 0: 
      dot_net.append("Y") 
      print(dname + ", is Y") 
     elif response == 300 or response == 30 or response == 60: 
      dot_net.append("N") 
      print(dname + ", is N") 


threads = [] 
for i in range(20): 
    t = threading.Thread(target=async_dns) 
    threads.append(t) 
    t.start() 


    print("Done !!") 
당신은 단순히 DNS 조회를 수행하고하여 try/except 블록의 몸으로 결과를 출력 코드 움직일 수

답변

0

: 큐가 비어 이제 때

def async_dns(): 
    s = adns.init() 

    while True: 
     try: 
      dname = q.get(False) 

      response = s.synchronous(dname,adns.rr.NS)[0] 
      if response == 0: 
       dot_net.append("Y") 
       print(dname + ", is Y") 
      elif response == 300 or response == 30 or response == 60: 
       dot_net.append("N") 
       print(dname + ", is N") 

      q.task_done() 
     except queue.Empty: 
      return 

queue.Empty이 제기되고를 예외 처리기는 단순히 스레드 기능을 종료합니다. 그렇지 않으면 dns 값이 인쇄됩니다.

관련 문제