docs에서 찾을 수 없지만 신호를 사용하지 않고 asyncore.loop()
에서 벗어날 방법이 있습니까?처리기에서 asyncore 발송자를 종료하는 방법은 무엇입니까?
6
A
답변
7
소스 코드를보고 나서 빨리 해결할 수있었습니다. 소스에 직접 연결하는 문서 덕분에!
루프를 종료하는 앱에서 간단히 올릴 수있는 예외가 있습니다 (ExitNow).
docs의 EchoHandler
예제를 사용하여 데이터 수신시 즉시 종료되도록 수정했습니다.
class EchoHandler(asyncore.dispatcher_with_send):
def handle_read(self):
data = self.recv(8192)
if data:
raise asyncore.ExitNow('Server is quitting!')
또한, 당신이 내부적으로 사용하는 경우는 ExitNow
그래서 앱을 발생시키지 않습니다 잡을 수있는 점에 유의하십시오. 이것은 나의 근원 중 일부입니다 :
5
연결이 남아 있지 않을 때도 asyncore 루프가 종료되어 연결을 닫을 수 있습니다. 여러 연결이 계속되면 asyncore.close_all()을 사용할 수 있습니다.
4
또 다른 방법은 asyncore.loop 호출의 count 매개 변수를 사용하는 것입니다. 그런 다음 다른 논리에 asyncore.loop 포장 할 수 있습니다
while(i_should_continue()):
asyncore.loop(count=1)
이 바로 열려있는 연결, 또는 조기 타임 아웃을 멈추지 않을 것입니다. 그러나 이것은 아마도 좋은 것일까요? 나는 청취 서버를 시작할 때 이것을 사용하고있다.
5
이 시도 :
서버에 대한한 클래스 (asyncore.dispatcher를 확장) :
class Server(asyncore.dispatcher):
def __init__(self, port):
asyncore.dispatcher.__init__(self)
self.host = socket.gethostname()
self.port = port
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((self.host, self.port))
self.listen(5)
print "[Server] Listening on {h}:{p}".format(h=self.host, p=self.port)
def handle_accept(self):
pair = self.accept()
if pair is not None:
sock, addr = pair
print "[ServerSocket] We got a connection from {a}".format(a=addr)
SocketHandler(sock)
서버를 관리하는 것입니다 스레드에 대한 또 다른 클래스를 ... 체크 (스레드를 확장)
: 이제class ServerThread(threading.Thread):
def __init__(self, port):
threading.Thread.__init__(self)
self.server = Server(port)
def run(self):
asyncore.loop()
def stop(self):
self.server.close()
self.join()
서버를 시작하기 : 우리가 부르는 곳 run() 메소드는, asyncore.loop()가 0
# This is the communication server, it is going to listen for incoming connections, it has its own thread:
s = ServerThread(PORT)
s.start() # Here we start the thread for the server
print "Server is ready..."
print "Is ServerThread alive? {t}".format(t=str(s.is_alive()))
raw_input("Press any key to stop de server now...")
print "Trying to stop ServerThread..."
s.stop()
print "The server will die in 30 seconds..."
당신은 서버가 즉시 죽지 않습니다 것입니다 ...하지만 당신이 "루프의 외부"에서 루프를 중지 할 경우는 아마도 적절한 솔루션을 정상적으로
관련 문제
- 1. 스팸 발송자를 아파치로 보호하는 방법은 무엇입니까?
- 2. 내부에서 cherrypy를 종료하는 방법은 무엇입니까?
- 3. asyncore 파이썬은
- 4. asyncore timeout
- 5. QThread를 종료하는 방법은 무엇입니까?
- 6. 처리기에서 활동을 마무리하는 방법은 무엇입니까?
- 7. 루아 스크립트를 종료하는 방법은 무엇입니까?
- 8. 자바에서 스레드를 종료하는 방법은 무엇입니까?
- 9. performSelectorInBackground : thread를 종료하는 방법은 무엇입니까?
- 10. GenericKeyedObjectPool을 안전하게 종료하는 방법은 무엇입니까?
- 11. 애니메이션을 갑자기 종료하는 방법은 무엇입니까?
- 12. Jquery setIntereval을 종료하는 방법은 무엇입니까?
- 13. 파이썬에서 UDPServer를 종료하는 방법은 무엇입니까?
- 14. CAcroApp를 올바르게 종료하는 방법은 무엇입니까?
- 15. E_NOTICE에서 PHP를 종료하는 방법은 무엇입니까?
- 16. ajax-loader.gif를 종료하는 방법은 무엇입니까?
- 17. InputSteam을 선언하고 종료하는 방법은 무엇입니까?
- 18. pyplot 루프를 종료하는 방법은 무엇입니까?
- 19. Java 프로그램을 종료하는 방법은 무엇입니까?
- 20. wp7 앱을 종료하는 방법은 무엇입니까?
- 21. MVC에서 함수를 종료하는 방법은 무엇입니까?
- 22. SocketServer 스레딩 TCP 서버 및 Asyncore 디스패처
- 23. asyncore 소켓이 제대로 닫히지 않습니다.
- 24. Hackstack Server App을 종료하는 방법은 무엇입니까?
- 25. Windows에서 특정 프로세스를 종료하는 방법은 무엇입니까?
- 26. Windows phone 7 앱을 종료하는 방법은 무엇입니까?
- 27. actionscript 라이브러리에서 항공 애플리케이션을 종료하는 방법은 무엇입니까?
- 28. android에서 애플리케이션을 닫거나 종료하는 방법은 무엇입니까?
- 29. WP7에서 응용 프로그램을 종료하는 방법은 무엇입니까?
- 30. Java에서 ConnectionManager를 사용하여 HttpConnection을 종료하는 방법은 무엇입니까?
죽는다. 위의 다른 솔루션은 루프 내에서 루프를 중지하기위한 것입니다. –