2012-09-06 3 views
2

파이썬에서 서버를 완전히 종료하는 방법은 무엇입니까? server.shutdown() 같은 코드는 들어오는 요청을 차단합니다. 누구든지 서버의 완전한 종료 코드를 제안 할 수 있습니까? 그것은 간단한 소켓 서버입니다.파이썬으로 서버를 완전히 종료하는 방법은 무엇입니까?

이 서버 내 코드입니다 : 변수 run를 사용하여

#!/usr/bin/python 
import socket 
from threading import Thread 

class sockServer: 

    def __init__(self,port): 
     self.socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     self.socket.bind(port) 
     self.socket.listen(5) 

    def _run(self): 
     while True: 
      request, client_address =self.socket.accept() 
      counter=self.req_thread(self,request) 
      counter.start() 

    class req_thread(Thread): 
     def __init__(self,controller,request): 
      Thread.__init__(self) 
      self.controller=controller 
      self.request=request 
      self.setDaemon(True) 

     def run(self): 
      input=self.request.makefile('rb',0) 
      output=self.request.makefile('wb',0) 
      l=True 
      i=0 
      try: 
       while l: 
      l=input.readline() 
      if l!="exit\r\n": 
         print "x" 
         output.write(bytes('hello\n')) 
        else: 
      print "y" 
         self.request.shutdown(2) 
      run=False 

      except socket.error: 
       pass 


if __name__ == '__main__': 

    import sys 
    if len(sys.argv) < 3: 
     print('Usage: %s [hostname] [port number]' % sys.argv[0]) 
     sys.exit(1) 
    hostname = sys.argv[1] 
    port = int(sys.argv[2]) 
    global run 
    run=True 
    while run: 
     server=sockServer((hostname,port)) 
     server._run() 

방법은 어떤 좋은 일을하지 않습니다! 그냥 완전히 후 프로그램을 종료하려는 경우이 할에

+1

코드 형식 수정 –

+1

sys.exit (0) ??? –

답변

2

당신이 더 극단적 인 버전을 사용할 수있는 직접 OS를 호출합니다.

import os 
os._exit() 

서버가 새 프로세스 또는 스레드를 분기 한 경우이 작업을 수행해야합니다. 어떤 일을하고 있으며 sys.exit이 예상대로 작동하지 않는 이유는 무엇입니까? 두 호출의 차이점에 대한이 설명을 참조하십시오. What is difference between sys.exit(0) and os._exit(0)

+0

그것은 작동한다! thnx 사람!! – JTN

2

당신은 항상 다음 import sys을 추가 할 수 있습니다 : sys.exit 후 작동하지 않는 경우

class req_thread(Thread): 
    def __init__(self,controller,request): 
     Thread.__init__(self) 
     self.controller=controller 
     self.request=request 
     self.setDaemon(True) 

    def run(self): 
     input=self.request.makefile('rb',0) 
     output=self.request.makefile('wb',0) 
     l=True 
     i=0 
     try: 
      while l: 
     l=input.readline() 
     if l!="exit\r\n": 
        print "x" 
        output.write(bytes('hello\n')) 
       else: 
     print "y" 
        self.request.shutdown(2) 
        sys.exit(0) 
     run=False 

     except socket.error: 
      pass 
+0

sys.exit()가 서버에서 작동하지 않습니다. – JTN

관련 문제