Python Falcon框架:高性能但应用少,用于项目或学习的利弊分析
[id_758091706]id_1981[id_1501301682]20877]

Python falcon 是一种框架,它更接近于 python wsgi。它的速度比 flask 和 Django 更快,性能也更高。
缺点之一是没人用,缺点之二是没人用,缺点之三也是没人用。它还过于年轻且接近底层,很多东西都得自己去写。官方文档的实例数量不多,社区经验与 flask 和 Django 相比,就如同程序员的头发那般稀少。当然,不同的人对于“多”和“少”的感受与定义各不相同。像在百度上一搜,全是相互复制的经验文章,这种方式是不可行的。
如果你想用它开发实际项目,我劝你可以考虑跑路了 加油!
如果你想要利用它来学习 PythonWSGI 以及与网络相关的知识,那么是可以进行尝试的。
本文仅使用了 Gunicorn,这种方式适合小型的网站或者访问量较小的网站。如果遇到较大的访问量,还是老老实实地添加 Nginx 吧。
Tag 包含 linux、systemctl、service、python、falcon、gunicorn。
文章目录
安装及设置 1. 安装python3及pip
可以参考网络上的资源文章,无论是用 yum 安装还是用源码安装都可以,并且推荐使用 python3.7 。
2. 安装虚拟环境
cd到你的文件目录,以下为例子
cd /var/local/Falcon
安装virtualenv(venv创建程序)
pip3 install-i 从 https://pypi.tuna.tsinghua.edu.cn 这个地址获取 simple 资源并用于 virtualenv
创建venv
virtualenv --python=python3 venv
启用venv
source ./venv/bin/activate
本项目不需要用到设置环境变量
跳过
安装falcon和gunicorn
pip3 install falcon gunicorn
防火墙及安全设置包括 Selinux 设置。为了省事可以直接关闭,可参考百度经验中关于如何关闭 Linux 里边的 selinux 的内容。
拿工资的时候不能直接关掉设置防火墙。要详细参考 CSDN - linux 防火墙来查看状态以及进行一些基本操作。
# 查询80端口是否开放
firewall-cmd --query-port=80/tcp
# 开放80端口
使用 firewall-cmd 进行操作,将其设置为永久生效,添加一个端口。=80/tcp
# 移除端口
使用 firewall-cmd 进行操作,设置为永久生效,移除指定的端口。=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
编写Python 程序 1. 编写Falcon程序
Falcon 是用于提供 web 服务的,它与 Flask、Django 等类似。在此以 Falcon 官方文档的程序作为例子,在实际情况中,在本地开发完成后直接通过 SSH 复制过来即可。
注意:这个 Python 最好不要被命名为像 falcon.py 这样与 Python 类重名的名称。
样例程序:
/var/local/Falcon 路径下的 FalconApp.py 文件
from wsgiref.simple_server import make_server
import falcon
class ThingsResource:
def on_get(self, req, resp):
"""Handles GET requests"""
resp.status = falcon.HTTP_200
resp.content_type = falcon.MEDIA_TEXT
resp.text = (
在我之上,还有那内在的道德法则。
'\n'
)
app = falcon.App()
things = ThingsResource()
app.add_route('/things', things)
if __name__ == '__main__':
with make_server('', 8000, app) as httpd:
print(在端口 8000 上提供服务……)
httpd.serve_forever()
此时,运行以下代码便能够将 Web 简单地运行起来,其情形就如同 Flask 等那样。
python3 FalconApp.py
运行成功后,命令行会输出“ Serving on port 8000...”。浏览器访问地址“/things”,就能够访问到页面。而直接访问地址“/(首页)”会出现 404 错误,因为该路由未被定义。但是,这样的服务在断开 SSH 后就会消失。
2. 编写Gunicorn
Gunicorn 存在两种启动方式。一种方式是通过直接启动命令并附带参数来实现配置。另一种方式是编写配置文件。本文主要讲述的是调用配置文件来启动 Gunicorn。
创建一个名为 gunicorn-conf.py 的文件,它的放置位置较为随意,本文将其放置在同一级目录/var/local/Falcon/。该配置文件需以.py 结尾,不然会出现 Warning。
# gunicorn.conf
bind = "0.0.0.0:80" #监听所有ip的80端口
workers = 4 启用 4 个线程。通常情况下,workers 的数量设置为 CPU 核心数加 1 是比较合适的。
backlog = 2048
pidfile = "/var/local/Falcon"路径下的"gunicorn.pid"文件
accesslog = "/var/local/Falcon"路径下的 access.log 文件 #用户访问日志位置
errorlog = "/var/local/Falcon/error.log" #程序异常日志位置
timeout = 30
debug = False
capture_output = True
所用到的日志最好先创建一个空文件
touch access.log error.log
此时,用以下代码就可以运行Gunicorn了。
使用 gunicorn 并配置为 gunicorn-conf.py 来运行 FalconApp 中的 app 。
此时命令行没有输出,接着会出现空行,只需按下 ctrl+C 即可。通过浏览器访问地址/things 就能看到网站,而且在断开 SSH 之后,该网站依然存在,能够提供持久服务。
编写服务程序
编写一个系统服务文件,其文件名为可自定义的。之后在使用 systemctl [start/stop/status] 服务名时会用到该文件,这里以 falcon.service 为例。
vim/usr/lib/systemd/system 目录下的 falcon.service 文件
然后复制以下内容:
/usr/lib/systemd/system 目录下的 falcon.service 文件
[Unit]
Description=Falcon (python WSGI)
After=network.target
[Service]
Type=forking
WorkingDirectory = /var/local/Falcon
PrivateTmp = true
Restart = on-failure
PIDFile =/var/local/Falcon 路径下的 gunicorn.pid 文件
ExecStart =启动 FalconApp:app
[Install]
WantedBy=multi-user.target
保存后刷新系统服务列表
systemctl daemon-reload
然后就能够如同其他系统服务那般,对整个 Web 服务器的启动和关闭进行控制。
# 启动服务
systemctl start falcon
# 关闭服务
systemctl stop falcon
# 重启服务
systemctl restart falcon
# 查看状态
systemctl status falcon -l
参考资料
CSDN 总结了在 linux 上部署 python + flask 项目的五种方法。
百度经验 - 如何关闭Linux里边的selinux
CSDN - linux防火墙查看状态及一些基本操作
看看我的.jpg