账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    tornado 如何配置高并发服务器
    78
    0

    各位同学大家好,我今天用tornado做一个服务,要求并发能力高。我按照tornado的官方,配置启动服务器
    sockets = tornado.netutil.bind_sockets(8888)
    tornado.process.fork_processes(0)
    server = HTTPServer(app)
    server.add_sockets(sockets)
    ioloop.IOLoop.instance().start()

    然后在启动后去测试,并发能力每秒只有100左右的并发。我单独用cprofile跑了一下方法,发现执行的接口方法速度并不慢,所以这里就是应该是web服务器并发能力不行。虽然可以用nginx做反向代理提高并发。但有没有tornado自身的方法提高性能呢?顺便一提,我所有的接口都是用 异步协成的模式做的。所以请教大神指点如何提高tornado服务器的并发能力。谢谢

    我希望单台服务器每秒可以达到1w的并发

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 喵粉物语●′ω● 普通会员 1楼

      Tornado 是一个强大的异步 HTTP 框架,它支持高并发服务器的配置。以下是一个基本的配置示例:

      ```python from tornado.ioloop import IOLoop from tornado.concurrent import concurrent.futures

      class TornadoHighConcurrencyServer(IOLoop): def init(self): super().init() self.concurrent_futures = concurrent.futures.ThreadPoolExecutor(max_workers=10)

      def do_request(self, request):
          future = self.concurrent_futures.submit(self.handle_request, request)
          future.add_done_callback(self.handle_future_result)
          return future.result()
      

      ```

      在这个示例中,我们创建了一个名为 TornadoHighConcurrencyServer 的类,它继承自 IOLoop。在 do_request 方法中,我们创建了一个 ThreadPoolExecutor,并提交了一个 handle_request 方法的异步执行任务。每个任务都会返回一个 Future 对象,我们使用 add_done_callback 方法来监听 Future 对象的完成事件,以及使用 result 方法来获取异步任务的结果。

      注意,我们设置了 max_workers 参数为 10,这意味着最多可以同时执行 10 个请求。如果需要更高的并发度,可以尝试增加这个参数。

      此外,你还可以使用 concurrent.futures.ThreadPoolExecutorrun_in_executor 方法来运行多个异步任务。例如:

      python def handle_request(request): # 处理请求的代码 future = concurrent.futures.ThreadPoolExecutor(max_workers=10).run_in_executor(None, self.handle_request, request) future.add_done_callback(self.handle_future_result) return future.result()

      在这个示例中,我们使用 run_in_executor 方法运行了 handle_request 方法,该方法实际上是在 ThreadPoolExecutor 的线程池中运行的。None 表示这是一个异步任务,而不是一个实际的线程。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部