我想问一下tornado.concurrent.run_on_executor(以后只是run_on_executor)如何工作,因为我可能不明白如何运行同步任务来阻止主IOLoop.
run_on_executor我发现所有使用的例子都只是time用来阻止循环.使用time模块它工作正常,但当我尝试使用时run_on_executor,任务阻止IOLoop.我能够看到应用程序使用多个线程,但它仍然阻塞.
我想用于使用run_on_executor散列密码bcrypt,但是用这个计算代替它以获得一些额外的测试时间.
在这里,我有一个小应用程序,以证明我的困惑.
from tornado.options import define, options
import tornado.web
import tornado.httpserver
from tornado import gen
from tornado.concurrent import run_on_executor
import tornado.httpclient
import tornado.escape
import time
import concurrent.futures
import urllib
executor = concurrent.futures.ThreadPoolExecutor(20)
define("port", default=8888, help="run on the given port", type=int)
# Should not be blocking ?
class ExpHandler(tornado.web.RequestHandler):
_thread_pool = executor
@gen.coroutine
def get(self, num):
i = int(num)
result = yield self.exp(2, i) …Run Code Online (Sandbox Code Playgroud)