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

[id_758091706]id_1981[id_1501301682]20877]

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

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

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

30阅读

外国教程python,python编程教学视频

2026年09月02日

24阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读