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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    tornado 如何处理大量文件传输请求
    23
    0
    我有两台tornado服务器作为文件传输,文件从A服务器传输到B服务器或从B服务器到A服务器这样的一个双向传输。在传输端为了提高并发我用了线程池,但是接受端却要一个一个的接收文件。接收文件本身是一个耗时操作,阻塞了ioloop主循环。有没有什么办法能够提升传输效率,现在程序往往会因为文件过大而阻塞住后续请求。我现在已经考虑替换tornado服务器,tornado并不适合我现在的使用场景,目标是使用fastapi+celery
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 残留的躯壳 普通会员 1楼

      Tornado 是一个基于 WSGI 的高性能 Web 应用服务器,可以处理大量文件传输请求。以下是一些基本的处理大量文件传输请求的步骤:

      1. 使用 Tornado 的文件上传模块:Tornado 提供了一个文件上传模块,可以用于处理文件上传请求。你可以使用这个模块来接收用户的上传文件,然后将它们存储在服务器上。

      ```python from tornado.web import FileUploadHandler from tornado.web import UploadHandler

      class MyHandler(FileUploadHandler): def file_chosen(self, event): self.write("The file has been selected.")

      class MyUploadHandler(UploadHandler): def initialize(self): self.add_header("Content-Type", "multipart/form-data") self.write("Uploading file...") self.file_count = 0 self.uploaded_files = []

      def on_forminit(self):
          self.add_header("Content-Type", "multipart/form-data")
          self.write("File count: " + str(self.file_count))
          self.file_count = 0
          self.uploaded_files = []
      
      def handle(self, file, client):
          self.file_count += 1
          self.uploaded_files.append(file)
      
          if self.file_count % 100 == 0:
              self.write("Uploaded %d files." % self.file_count)
      

      if name == "main": app = tornado.web.Application([ (r"/upload", MyHandler), ])

      server = tornado.listen(8000)
      tornado.serve_forever(server)
      

      ```

      1. 使用 Tornado 的异步处理:在处理大量文件上传请求时,可以使用异步处理来提高服务器的性能。你可以使用 tornado.concurrent 提供的异步任务池来处理请求。

      ```python from tornado.concurrent import ThreadPoolExecutor

      def handle_files(): with ThreadPoolExecutor() as executor: for file in client.files: executor.submit(MyHandler, file)

      if name == "main": app = tornado.web.Application([ (r"/upload", handle_files), ])

      server = tornado.listen(8000)
      tornado.serve_forever(server)
      

      ```

      以上就是处理大量文件传输请求的基本步骤,你可以根据自己的需求和实际情况进行调整。

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