本文主要介绍了Sanic框架的应用部署方法,结合实例分析了Sanic框架应用部署的具体流程、相关命令和使用技巧,并讲解了Gunicorn的配置方法,有需要的朋友可以参考。
本文通过一个实例描述了Sanic框架的应用部署方法。分享给你,供你参考,如下:
简介
Sanic是类似Flask的Python 3.5 Web服务器,写速度很快。除了Flask,Sanic还支持异步请求处理程序。这意味着您可以使用Python 3.5中新的出色的异步/等待语法来使您的代码无阻塞且快速。
在之前的博文中,我们已经讨论了如何使用Sanic开发Python守护进程。接下来,我们将记录如何部署Sanic应用程序。
部署
内置的web服务器简化了Sanic的部署。在定义了一个sanic实例之后。Sanic,您可以调用run()方法,然后传入以下关键字参数:
host:主机服务器地址,默认为127.0.0.1。
port:开始断开服务器。默认值为8000。
debug:启用调试输出,默认为假。
ssl:sslContext用于人员的SSL加密,默认值为None。
sock:服务器接受连接的套接字,默认为无。
wrokers:生成工作进程数;默认值为1。
loop:asyncio兼容的循环事件。如果未指定,Sanic将创建自己的事件循环,默认为None。
protocol:asyncio . protocol的子类,默认为HttpProtocol。
wrokers
默认情况下,Sanic在主进程中只使用一个CPU进行监控。有时,为了最大限度地利用资源,我们可以指定运行参数的工作进程数:
app.run(host='0.0.0.0 ',port=5000,wrokers=4)
Sanic会在多个进程中自动交换路由,所以如果有多个CPU的话,建议工人越多越好。
通过命令运行
如果您喜欢命令行参数,可以通过执行模块来启动Sanic服务器。例如,如果您使用文件名manager.py将Sanic初始化为app,您可以像这样运行服务器:
复制代码如下:python-msanicmanager . app-host=0 . 0 . 0 . 0-port=5000-workers=4
如果通过命令行运行sanic程序,则不需要调用Python文件中的app.run()方法。
通过Gunicorn运行
了解过Gunicorn的人都知道,Gunicorn是WSGI容器的一种,uWSGI比较常见(请参考附录Gunicorn配置说明)。
为了用Gunicorn运行Sanic程序,我们还需要设置worker-class参数,并将其设置为sanic.worker.GunicornWorker:
复制代码如下:guni corn manager:app bind 0 . 0 . 0:5000 worker-classsanic . worker . guni corn worker
如果您的应用程序遭受内存泄漏,您可以配置Gunicorn在完成指定数量的请求后正常重启工作程序,这有助于限制内存泄漏的影响。
附录:Gunicorn配置说明
在之前的文章《Python Web编程之WSGI协议》中,我们记录了WSGI容器的作用,我们知道唯一常见的容器是uWSGI和Gunicorn。在之前的《Python Web编程之WSGI协议》篇文章中,我们记录了它们的特点和优缺点,这里就不赘述了。接下来,我们将重点记录Gunicorn的一些配置:
config
-c配置,-配置配置
Gunicorn配置文件路径,一个字符串格式的路径形式,例如:
gunicorn -c gunicorn.conf管理器:app
bind
-b地址,-绑定地址
Gunicorn绑定服务器套接字,主机形式的字符串格式。Gunicorn可以绑定多个套接字,例如:
guni corn-b 127 . 0 . 0 . 1:8000-b[:1]:9000经理:应用程序
backlog
-积压
挂起连接的最大数量,即等待服务的客户数量。必须是正整数,一般设置在64~2048的范围内,一般设置为2048。超过此数量将导致客户端在尝试连接时出错。
workers
-w INT,- workers INT
用于处理的工作进程数,为正整数。默认值为1。建议的工作进程数是当前CPU数* 2 ^ 1。计算当前CPU数量的方法:
导入多重处理
打印多重处理. cpu_count()
worker_class
-k启动,-工人阶级启动
默认情况下,要使用的工作模式是同步。您可以将下列常见类型的“字符串”称为绑定类:
同步
Eventlet:需要下载eventlet=0.9.7。
Gevent:需要下载gevent=0.13。
龙卷风:龙卷风=0.2需要下载。
gthread
Gaiohttp:需要python 3.4和aiohttp=0.21.5。
threads
-线程整数
已处理的工作线程数,使用指定数量的线程运行每个工作线程。是正整数,默认值为1。
worker_connections
-工人-连接INT
并发客户端的最大数量,默认为1000。该设置将影响gevent和eventlet操作模式。
max_requests
-最大请求整数
重新启动前作业将处理的最大请求数。默认值为0。
max_requests_jitter
-最大请求数-抖动整数
要添加到max_requests的最大抖动。抖动会导致每个作业的重启随机化,这是为了避免所有作业都被重启。randint(0,最大请求抖动)
timeout
-t INT,-超时INT
这么多秒后,作业将被终止并重新启动。一般设置为30秒。
graceful_timeout
-优雅超时INT
优雅的人工超时,默认情况下,这个值是30。收到重启信号后,工作人员有那么多时间完成服务请求。超时后(从收到重启信号开始)仍然存活的工作将被强制终止。
keepalive
-保持活动INT
在保持活动连接上等待请求的秒数,默认情况下为2。通常设置在1到5秒之间。
limit_request_line
-限额请求行INT
HTTP请求行的最大大小。此参数用于限制HTTP请求行的允许大小。默认情况下,该值为4094。是一个数值,取值范围为0~8190。这个参数可以防止任何DDOS攻击。
limit_request_fields
-限制-请求-字段INT
限制HTTP请求中请求头字段的数量。该字段用于限制请求报头字段的数量以防止DDOS攻击,并且可以与limit-request-field-size一起使用以提高安全性。默认情况下,该值为100,不能超过32768。
limit_request_field_size
-限制-请求-字段-大小INT
限制HTTP请求中请求头的大小,默认情况下是8190。该值为整数或0。当该值为0时,表示对请求头的大小没有限制。
reload
-重新加载
当代码更新时,工作将重新开始,默认情况下为False。该设置用于开发,当应用程序发生变化时,将导致工作重新开始。
reload_engine
-重新加载-发动机启动
选择过载引擎,有三个支持的引擎:
汽车
拉
Inotity:你需要下载它
spew
-呕吐
打印服务器执行的每个语句。默认值为False。该选项是原子性的,即全部打印或不打印。
check_config
-检查-配置
显示当前配置,默认值为False,即display。
preload_app
-预载
在复制(派生)工作进程之前加载应用程序代码,默认情况下为False。通过预加载应用程序,您可以节省RAM资源并加快服务器启动时间。
chdir
- chdir
在加载应用程序之前,将chdir目录指定到指定的目录。
daemon
-守护进程
Guard Gunicorn进程,默认为False
raw_env
-东环境,-环境环境
设置环境变量(key=value)并将变量传递给执行环境,例如:
guni corin-b 127 . 0 . 0 . 1:8000-e ABC=123经理:app
在配置文件中写入:
raw_env=['abc=123']
pidfile
-p文件,- pid文件
设置pid文件的文件名。否则,将不会创建pid文件。
worker_tmp_dir
- worker-tmp-dir DIR
设置工作临时文件目录。如果没有,将采用默认值。
accesslog
-access-日志文件文件
要写入的访问日志目录。
access_log_format
- access-logformat字符串
要写入的访问日志格式。比如:
access _ log _ format=' %(h)s %(l)s %(u)s %(t)s '
常见格式描述:
标识码
解释
h
远程地址
l
"-"
u
用户名
t
时间
r
行,如:GET /test HTTP/1.1
m
请求方法
U
没有查询字符串的URL
q
查询字符串
H
草案
s
状态代码
B
响应长度
b
响应长度(CLF格式)
f
涉及
a
美国联合航空公司(United Airlines)
T
请求时间,单位为秒
D
请求时间,毫秒
p
流程id
{Header}i
请求标题
{Header}o
相应的头部
{可变}e
环境变量
errorlog
-错误-日志文件,-日志文件文件
要写入错误日志的文件目录。
loglevel
-日志级别
错误输出电平。
支持的级别名称有:
调试(调试)
信息(信息)
警告(警告)
错误(错误)
关键(关键)
关于Gunicorn的更多配置,请参考:http://docs.gunicorn.org/en/stable/settings.html #服务器-力学
更多Python相关内容,请参考我们的专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》和《Python文件与目录操作技巧汇总》
希望本文对Python编程有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。