[英]tornado web http request blocks other requests, how to not block other requests
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.')
問題: HandlerA阻止HandlerB 10秒鍾。
目標
這是非阻塞,異步,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())
現在這不是處理它的最好方法......但至少它是一個開始。
解
在這里找到在Tornado中運行阻止代碼
這是Python。 所以, time.sleep
將始終阻止流程! 要使用Tornado在10秒后調用操作,您需要使用tornado.ioloop.add_timeout
函數並將回調作為參數傳遞。 文檔了解更多信息 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.