如图所示:
将ThreadPoolExecutor线程池的数量设置为1后,还是不会阻塞,两个请求可以同时运行,经测试,无论ThreadPoolExecutor里面的数量填多少,最后都是10个,不清楚哪里出了问题,但是,如果将线程池脱离tornado,直接在控制台中运行,是可以控制其数量的,有没有人遇到过这种问题??
如图所示:
将ThreadPoolExecutor线程池的数量设置为1后,还是不会阻塞,两个请求可以同时运行,经测试,无论ThreadPoolExecutor里面的数量填多少,最后都是10个,不清楚哪里出了问题,但是,如果将线程池脱离tornado,直接在控制台中运行,是可以控制其数量的,有没有人遇到过这种问题??
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题分析: 根据您的描述,您将ThreadPoolExecutor线程池的数量设置为1后,但仍然无法阻塞,两个请求可以同时运行。经过测试,无论ThreadPoolExecutor中的数量设置多少,最终仍然是10个。在tornado中,线程池无法正常工作,但在控制台中可以正常工作。这可能是由于tornado框架的特性导致的问题。 解决方案:
import tornado.web
import concurrent.futures
class MainHandler(tornado.web.RequestHandler):
executor = concurrent.futures.ThreadPoolExecutor(1)
async def get(self):
response = await self.do_something()
self.write(response)
async def do_something(self):
return await self.executor.submit(self.some_blocking_function)
def some_blocking_function(self):
# 模拟一个耗时操作
import time
time.sleep(5)
return "Done"
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
以上示例代码演示了如何在tornado中使用ThreadPoolExecutor来处理请求。在这个示例中,设置了线程池数量为1,但是使用了async/await实现了异步处理。希望这个示例能够帮助您解决问题。