六六六嗷 2020-03-06 15:12 采纳率: 0%
浏览 733

python3.8+tornado6 线程池ThreadPoolExecutor数量设置无效问题

图片说明

如图所示:

将ThreadPoolExecutor线程池的数量设置为1后,还是不会阻塞,两个请求可以同时运行,经测试,无论ThreadPoolExecutor里面的数量填多少,最后都是10个,不清楚哪里出了问题,但是,如果将线程池脱离tornado,直接在控制台中运行,是可以控制其数量的,有没有人遇到过这种问题??

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-25 18:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据您的描述,您将ThreadPoolExecutor线程池的数量设置为1后,但仍然无法阻塞,两个请求可以同时运行。经过测试,无论ThreadPoolExecutor中的数量设置多少,最终仍然是10个。在tornado中,线程池无法正常工作,但在控制台中可以正常工作。这可能是由于tornado框架的特性导致的问题。 解决方案:
    1. 这可能是由于tornado框架中的异步处理机制导致的。在tornado框架中,请求是通过事件循环驱动的,而不是通过多线程来处理。因此,即使设置了线程池数量为1,线程池中的任务仍然可以并发执行。建议查阅tornado文档,了解更多关于异步处理的内容。
    2. 可以尝试在tornado中使用其他的异步处理方法,例如coroutine或者async/await来替代线程池的方式。这样可以更好地利用tornado框架的特性,实现并发处理。
    3. 如果您仍然希望在tornado中使用线程池,可以尝试使用concurrent.futures模块提供的ThreadPoolExecutor以外的其他线程池实现,例如ProcessPoolExecutor。这些实现可能会更好地适应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实现了异步处理。希望这个示例能够帮助您解决问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同