12

我使用 Flask 微框架实现了一个多线程 Web 服务器。基本上,我的服务器有一个任务队列和一个线程池。因此,它可以处理多个请求。由于 Flask 是用 Python 实现的,并且 Python 线程不是真正并发的,所以我的 Web 应用程序有点滞后。

Flask 是否有任何替代品来克服多线程问题?

4

3 回答 3

25

我遇到了这个问题,我有点失望,没有人指出烧瓶(以及大多数 python 网络应用程序是部署的)。见: http: //flask.pocoo.org/docs/deploying/#deployment

我首选的部署选项是超级简单的Tornado ,它在 LinuxWindows上同样适用(如果我将它与现有网站一起部署,或者甚至将混合部署作为现有网站的一部分,我通常使用 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()

通过: http: //flask.pocoo.org/docs/deploying/wsgi-standalone/#tornado

于 2014-01-17T01:44:24.347 回答
8

这不是 Flask 的错,它是 Python 解释器的一个限制,所以你使用的任何框架都会受到它的影响。

但是有一个很好的方法可以避免这个问题。要获得真正的并发,您可以使用进程池而不是线程。multiprocessing模块提供了一个与 threading 模块兼容的API,但它为工作线程创建子进程。我已经使用这个模块为 Flask 应用程序创建后台工作程序,并且发现它工作得很好。

于 2013-08-30T17:04:33.783 回答
1

现在趋势中有一个新的包,它对生产也很健壮,它是用 python 实现的,而且很容易理解。请看一看。 快速API

于 2020-10-23T15:51:23.687 回答