前言
Sanic是一个类似Flask的基于Python3.5 +支持 async/await 语法的异步无阻塞web框架,这意味着我们可以依靠其处理异步请求的新特性来提升服务性能。但是Sanic的速度能有这么大的提升,关键还是Sanic使用了uvloop作为asyncio的事件循环。uvloop基于libuv,libuv是一个使用C语言实现的高性能异步I/O库,uvloop用来代替asyncio默认事件循环,可以进一步加快异步I/O操作的速度
安装
使用Termux安装Sanic并不像安装Flask只要一条命令pip install flask就可以安装成功,在安装的过程中出现了一些错误
安装python环境
pkg install clang python
安装Sanic
pip install sanic
Termux会自动下载并安装Sanic的依赖包:httptools、ujson、uvloop、aiofiles、websockets、multidict
在安装httptools包时出现如下错误
httptools/parser/parser.c:4:10: fatal error: 'Python.h' file not found
#include "Python.h"
^~~~~~~~~~
1 error generated.
error: command 'i686-linux-android-clang' failed with exit status 1
主要错误应该是缺失了i686-linux-android-clang的文件,错误处理只要安装python-dev:
pkg install python-dev
ujson包同样需要安装python-dev,如果已经安装了就可以正常安装成功
接下来在安装uvloop包时出现如下错误:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libuv.pc
config.status: executing depfiles commands
config.status: executing libtool commands
error: [Errno 2] No such file or directory: 'make': 'make'
这个错误应该是没有安装make工具,安装make工具后就可以了:
pkg install make
aiofiles、websockets、multidict这三个包不需要额外安装其它扩展工具
前面的依赖包都安装成功,最后安装Sanic将不会在出现错误
测试安装
from sanic import Sanic
导入Sanic包没有出现错误则表示安装成功
将以下测试代码保存到hello.py文件,然后把文件放至Termux的当前目录Home,当前目录可以使用命令pwd查看路径
from sanic import Sanic
from sanic.response import json
app = Sanic()
@app.route('/')
async def test(request):
return json({'hello': 'world'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
运行以下命令,启动Sanic服务
python hello.py
在浏览器中输入:http://localhost:8000 访问
知识扩展
python-dev包是什么
linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包
python-dev或python-devel称为是python的开发包
其中包括了一些用C/Java/C#等编写的python扩展在编译的时候依赖的头文件等信息
比如我们在编译一个用C语言编写的python扩展模块时,而这个类库内含有#include<Python.h>等这样的语句,因为需要编译调用python api的c/c++文件,因此我们就需要先安装python-dev开发包
python-dev的包在centos的yum中不叫python-dev,而是python-devel
make是什么
make是一个命令工具,是一个解释makefile中指令的命令工具。它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。make 会自动的判别原始码是否经过变动了,而自动更新执行档
为什么要使用make
假设,现在一个项目里面包含了100个程序文件,如果要对这个项目进行编译,那么光是编译指令就有100条。如果要重新进行编译,那么就又得像之前一样重新来一遍。这样重复且繁琐的工作实在是让我们很不爽啊。所以,用make来进行操作,间接调用gcc岂不是很方便?如果我们更动过某些原始码档案,则 make 也可以主动的判断哪一个原始码与相关的目标文件档案有更新过, 并仅更新该档案。这样可以减少重新编译所需要的时间,也会更加方便
makefile又是干什么的
makefile其实就是一个文档,里面定义了一系列的规则指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,它记录了源文件如何编译的详细信息!makefile一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
cmake是什么
CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库
make和cmake的区别
makefile在一些简单的工程完全可以人工下手,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。这时候就出现了CMake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改