import tornado.web
import Queue
QUEUE = Queue.Queue()
class HandlerA(tornado.web.RequestHandler):
def get(self):
global QUEUE
self.finish(QUEUE.get_nowait())
class HandlerB(tornado.web.RequestHandler):
def get(self):
global QUEUE
QUEUE.put('Hello')
self.finish('In queue.')
문제 : 10 초 동안 HandlerA 블록 HandlerB. 시간 제한 예외까지 .... HandlerB과 대기에 의해 처리 HandlerA과 대기에 의해 처리토네이도 웹 HTTP 요청 블록 다른 요청, 다른 요청
- 브라우저 A를 ...
- 브라우저 B
목표
- 브라우저 HandlerA가 처리하고 기다리는 중 ...
- 브라우저 B가 HandlerB에서 처리하고 r
이 비 차단, 비동기, epoll 파일 또는 소켓에 문제인가를 대기열에서 제외 후
감사합니다.
업데이트 :
나는 Queue.get_nowait() 요청을 처리하기 위해 새 스레드로이 코드를 업데이트했습니다. 제가 두려워하는 것은 한 번에 수천 개의 요청을 처리 할 것이므로 한 번에 수천 개의 스레드를 가질 것이라고 생각하는 까다로운 솔루션입니다. 가까운 장래에 epoll
스타일로 이동할 것을 고려 중입니다.
class HandlerA(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
thread.start_new_thread(self.get_next)
def get_next(self):
global QUEUE
self.finish(QUEUE.get_nowait())
이제는이 문제를 해결하는 가장 좋은 방법은 아니지만 최소한 시작점입니다.
솔루션
이 질문은/문제는 여기에 답변 : http://stackoverflow.com/questions/14293238/running-blocking-code-in-tornado/14298520 –