python web service开发

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 记录第一个web python服务

python web service开发

由于项目业务需要,接下来的一段时间主要是做web service开发。关于python web service开发主要有两方面的考量:

  • 实现服务
  • 测试服务性能

服务的整个过程就是提供一个接口供别人来请求,服务器接收请求后就准备数据,并将准备好的结果返回给请求端。小组采用Flask + Gunicorn + Nginx 部署的整体方案来实现服务支持,其中重点需要了解的是Flask和Gunicorn,Nginx是运维那边负责。

Nginx

Nginx(发音同engine x)是异步框架的网页服务器,也可以用作反向代理负载平衡器HTTP缓存。该软件由伊戈尔·赛索耶夫创建并于2004年首次公开发布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7亿美元收购。

Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx,通常作为负载均衡器,作用如下:

  • Nginx可以缓存住请求,然后内网再次发起请求,并且可以配置负载均衡,如果一台机器 的多进程(Gunicorn就是多进程)吃不消的情况下,负载均衡可以把请求打向多个机器
  • Nginx替代Python处理静态文件的请求,以提高性能
  • 很多时候一个机器上可能不止一个服务,需要像Nginx这样的web服务器做一次proxy_pass

下面是其基本框架:

1111

Gunicorn

Gunicorn是Python下的一个WSGI服务器,听起来很普通,不过因为它支持很多特性,在 Python界还是很流行,例如作为起Flask的父进程,支持用gevent把Flask打个patch等。

它使用的是pre-fork的模式,即启动的时候fork出n个进程,然后master进程负责监听 信号和子进程,如果子进程挂了,那么master会拉一个新的起来,如果有对应信号, master会发起相应的动作。

Gunicorn的选项从三个地方读取:

  • 首先从框架里指定,这里只有一个叫Paste的框架才有,我们可以忽略之
  • 其次从 -c <path/to/configuration>中指定的python文件里读取
  • 最后从命令行参数里读取

顺序是从上往下,优先级递增。

详细的配置都在这里:http://docs.gunicorn.org/en/stable/settings.html

Flask

Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎Flask使用BSD授权。

Flask被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

实现服务

主要服务程序是基于Flask框架编写的,将离线封装好的python程序用Flask封装一下,使其支持GET或POST请求。例如

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

上面这个程序为印出Hello World的网页程序,程序启动之后,在本地输入0.0.0.1:5000/即可出现显示Hello World的网页。

def hello()就是主函数,离线运算的主函数封装在此就行,其余的Flask框架都封装好的,方便实现接口服务器。

缓存

用完缓存之后,性能得到飞跃的提升。

连接池

由于项目需要多线程读写数据库,所以使用数据库连接池这种方式连接会比较好,不然容易产生数据库事务问题。

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

性能测试

性能测试使用工具是siege,在之前的文章《web service压测工具:siege安装及使用介绍》中介绍过了,这里不再进行详细介绍,下面展示性能测试结果:

  • 未使用缓存的情况:

    1

  • 使用缓存的情况:

    2

  • 使用缓存和连接池的情况:

    3

可以看到,当使用缓存时,性能得到飞跃的提升,使用连接池,性能变化不大,但不会产生事物问题。

参考

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
7天前
|
分布式计算 并行计算 安全
在Python Web开发中,Python的全局解释器锁(Global Interpreter Lock,简称GIL)是一个核心概念,它直接影响了Python程序在多线程环境下的执行效率和性能表现
【6月更文挑战第30天】Python的GIL是CPython中的全局锁,限制了多线程并行执行,尤其是在多核CPU上。GIL确保同一时间仅有一个线程执行Python字节码,导致CPU密集型任务时多线程无法充分利用多核,反而可能因上下文切换降低性能。然而,I/O密集型任务仍能受益于线程交替执行。为利用多核,开发者常选择多进程、异步IO或使用不受GIL限制的Python实现。在Web开发中,理解GIL对于优化并发性能至关重要。
25 0
|
3天前
|
数据采集 SQL 关系型数据库
Python学习路线【对标大厂Python开发工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫
Python学习路线【对标大厂Python开发工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫
30 14
|
3天前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
2天前
|
设计模式 Rust 安全
深入理解PHP 7的新特性及其对现代Web开发的影响
本文通过数据驱动的分析,探讨了PHP 7的发布如何革新了Web开发的面貌。文章首先概述了PHP 7带来的性能提升与新特性,然后通过实际案例和性能测试数据,详细讨论了这些新特性对提高代码效率、增强安全性和支持现代编程范式的具体影响。最后,文章将评估PHP 7在当前Web开发环境中的地位,并对其未来的发展做出展望。
|
3天前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
|
8天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的正式发布,这一版本带来了多项重大改进和新特性,旨在提升性能、增加语言的灵活性并简化开发流程。本文将详细探讨PHP 8中的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何影响现代Web开发的实践。通过引用最新的性能数据和开发者反馈,我们将深入理解PHP 8带来的变革,以及它对现有项目和未来趋势的潜在影响。
|
8天前
|
安全 大数据 PHP
深入理解PHP 7中的新特性及其对现代Web开发的影响
【6月更文挑战第28天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,揭示这些变化如何重塑Web开发领域。我们将一窥未来PHP的发展趋势,并分析开发者如何利用这些新特性来构建更快、更安全、更易于维护的应用程序。
14 1
|
2天前
|
Java 应用服务中间件 Linux
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
Tomcat安装部署[单机软件],可以让用户开发的WEB应用程序,变成可以被访问的网页,Tomcat的使用需要jdk环境
|
2天前
|
JSON 安全 编译器
PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的发布,这一流行的服务器端脚本语言带来了诸多改进和新增特性,这些变化不仅提升了语言本身的性能和安全性,还对现代Web开发实践产生了深远影响。本文将深入探讨PHP 8的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析它们如何优化代码编写、强化类型安全以及提高执行效率。同时,我们还将讨论这些新特性对开发者构建更快、更可靠应用程序的能力所产生的积极效应。
6 0
|
3天前
|
IDE 编译器 测试技术
PHP 8新特性解析及其对现代Web开发的影响
本文深入探讨了PHP 8版本中引入的新特性,并分析了这些变化如何影响现代Web开发的实践。通过引用最新的性能测试数据和开发者社区反馈,本文揭示了PHP 8在提升开发效率、增强代码安全性及优化性能方面所做出的贡献。同时,文章还讨论了PHP 8新特性对于现有项目升级路径的实际指导意义,为读者提供了关于是否以及如何迁移至PHP 8的洞见。
8 0