class Client(tornado.websocket.WebSocketHandler):
def open(self):
print "Connection is opened"
def on_message(self, message):
self.Process(message)
def on_close(self):
print "socket closed"
위의 코드는 python/tornado로 가정합니다. Client
의 인스턴스는 새 websocket 클라이언트가 서버에 연결할 때 만들어집니다. 문제는 self.process(message)
이 진행되는 동안 처리가 완료되고 전체 처리기가 차단되어 (연결을 수락하거나 메시지를받지 않음) self.process(message)
이 진행 중일 때입니다. 이 장애물을 극복하기위한 해결책이 있습니까?토네이도 비 차단 웹 소켓 서버 구현
'self.process' 메소드를 별도의 스레드에서 시도해 볼 수 있습니다. CPU 집약적 인 작업 인 경우 별도의 스레드에서 실행하는 대신 사용할 수 없습니다. 네트워크 연결 작업 인 경우 해당 작업에 대한 비동기 라이브러리를 찾거나 직접 작성할 수 있습니다. – xyres
편집 [마지막 코멘트에서 일부 언어가 혼란 스럽습니다] : ['max_workers'] (https://docs.python.org/3.5/library/concurrent.futures.html#concurrent)로 스레드 수를 제한 할 수 있습니다. futures.ThreadPoolExecutor) 인수를 사용합니다. 따라서 한 번에 제한된 수의 요청 만 처리되고 나머지는 대기열에 저장됩니다. – xyres
방금 'ThreadPoolExecutor'가 생겼습니다. 나는 이것이 이것을위한 좋은 라이브러리라고 생각한다. –