公司用flask开发应用,由于flask本身运行不稳定,需要将其部署在可以容纳WSGI应用的服务器上,客户服务器是windows server 2008,原来发布解决方案是在Linux下Nginx+uWSGI,uWSGI不能运行在windows下。于是梳理可以在windows下运行方法。
- Gevent:是一个 Python 并发网络库,它使用了基于 libev 事件循环的 greenlet 来提供一个高级同步 API
- Twisted Web:Twisted Web 是一个 Twisted 自带的网络服务器,是一个成熟的、异步的、 事件驱动的网络库。 Twisted Web 带有一个标准的 WSGI 容器,该容器可以使用 twistd 工具运行命令行来控制。
- tornado:异步非阻塞的web服务,有类似的文章介绍,flask官方文档中没有推荐使用。
- Apache:老牌web服务安装MOD_WSGI后可以运行
我选择的是Twisted
安装twisted
pip install -i https://pypi.douban.com/simple/ twisted
新建文件twisted_web.py 录入如下代码
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
def application(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain')])
return ['Hello, world!']
resource = WSGIResource(reactor, reactor.getThreadPool(), application)
在cmd键入如下命令运行
twistd -n web --wsgi twisted_web.application
#其中twisted_web是文件名,application是函数application(environ, start_response)
以上是在twisted框架下建立的服务,做好的flask应用怎么搞,建个文件flask_web.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
if __name__ == '__main__':
app.run()
在cmd的文件目录下运行如下命令
twistd -n web --wsgi flask_web.app
#其中flask_web是文件名,app是app = Flask(__name__)中变量
flask被正常运行。
到这里没有什么新鲜内容,很多文章中都介绍过。
上面两个命令运行时有没有类似这样的提示:twistd: No such WSGI application: 'flask_web.app’
明明是当前目录下运行的找不到?有办法
set PYTHONPATH=.
#设置为当前目录
开发时候都建立了python虚拟环境,结构应该和我的差不多,库文件、执行文件都在里面。可以写个批处理运行应用。
建立run.bat内容如下
set PYTHONPATH=.;venv/Lib;venv/Lib/site-packages
set PATH=%PATH%;venv/Scripts
twistd -n web --port tcp:8080 --wsgi run.app
这样在cmd执行run.bat就可以运行flask的应用了。