API如何使用python中的tornado框架接受多个请求并同时运行?

时间:2018-07-04 09:26:18

标签: python-3.x asynchronous tornado

我想使用json格式的名称和网址来获取许多图像,就像这样:

{
  "imagesInfo":[
    {
  "url":"https://upload.wikimedia.org/wikipedia/commons/b/ba/Flower_jtca001.jpg",

 "fileName": "A",
}
]
}

然后从url下载它们并将图像保存在我的图像服务器中,但是当它接受一个请求并运行它时,无法同时运行其他请求并阻塞它们,直到第一个请求完成为止。代码,以便它可以接受请求并并行运行它们,我使用了Tornado框架,该框架在其文档中说是异步的,并且我使用了@ tornado.gen.coroutine,但是它没有用。我不想使用进程池和线程池,因为我之前对其进行过测试,并且占用了所有服务器资源并停止运行。这是我的FileHandler:

class FileHandler(BaseHandler):
 @tornado.gen.coroutine
 def prepare(self):
   self.request.body = self.request.body.decode('utf-8')
   self.json_args = json.loads(self.request.body)

 @tornado.gen.coroutine
 def post(self ,arg):

    if arg == "bulkImageImport":

       save_instance=SaveImage()
       yield save_instane.save_image(self.json_args['imagesInfo'])
       self.finish("done")

这是可在不同路径下运行的app.py文件:

(ImageRoute是在其中定义了不同路由的类。)

def make_app():
  return tornado.web.Application([(r"/", MainHandler),
    (ImageRoute.BLOB_IMAGE, imageHandler.ImageHandler),        
    (ImageRoute.BULK_IMAGE_IMPORT, FileHandler.FileHandler),])

if __name__ == "__main__":

  app = make_app()    
  app.listen(config.PORT)   
  tornado.ioloop.IOLoop.current().start()

如果我将框架更改为django,是否可以解决问题?

我期待任何有用的解决方案。

谢谢

0 个答案:

没有答案