我使用Flask micro框架实现了一个多线程Web服务器。基本上,我的服务器有一个任务队列和一个线程池。因此,它可以处理多个请求。由于Flask是用Python实现的,并且Python线程并不真正并发,我的Web应用程序有点滞后。
Flask有什么替代品可以解决多线程问题吗?
答案 0 :(得分:23)
我遇到了这个问题,我有点失望没有人指出烧瓶(以及大多数python网络应用程序意味着要部署)。请参阅:http://flask.pocoo.org/docs/deploying/#deployment
我首选的部署选项是超级简单Tornado,它在Linux 和 Windows上同样运行良好(如果我将其与现有网站一起部署,或者甚至是混合部署,作为在现有站点中,我通常使用IIS应用程序请求路由[ARR]作为Tornado的反向代理。我也使用gevent取得了巨大的成功。
Tornado是可扩展,无阻塞的Web服务器和工具的开源版本,为FriendFeed提供支持。因为它是非阻塞的并且使用epoll,它可以处理数千个同时站立的连接,这意味着它是实时Web服务的理想选择。将此服务与Flask集成非常简单:
因此,如果您的烧瓶应用程序位于yourapplication.py中,您可以创建另一个名为tornado_web.py并使用它来为您的应用程序提供服务,如下所示:
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
via:http://flask.pocoo.org/docs/deploying/wsgi-standalone/#tornado
答案 1 :(得分:7)
这不是Flask的错,它是Python解释器的一个限制,因此您使用的任何框架都将受其约束。
但有一种很好的方法可以避免这个问题。要获得真正的并发,您可以使用进程池而不是线程。 multiprocessing模块提供了与线程模块兼容的API,但它为工作者创建子进程。我已经使用这个模块为Flask应用程序创建后台工作程序,并且发现它们运行良好。
答案 2 :(得分:1)
现在趋势是有一个新软件包,它对于生产也很可靠,它是用python实现的,而且易于理解。请看看。 FastAPI