python
文章平均质量分 79
胖虎是只mao
这个作者很懒,什么都没留下…
展开
-
openstack nova 源码分析
APIRouterV21 基于 ROUTE_LIST,使用 Routes 模块作为 URL 映射的工具,将各个模块所实现的 API 对应的 URL 注册到 mapper 中,并把每个资源都封装成。实际调用 oslo_service 的 launch 函数,创建绿色线程(greenthread)或进程,最终调用 Service 实例的 start 方法。目录包含每个 API 对应的 Controller 实现,Resource 对象将请求的 API 映射到相应的 Controller 方法上。...原创 2022-08-18 17:45:42 · 1192 阅读 · 0 评论 -
在线聊天——WebSocket 简介与实际实现
在 HTML5 之前,浏览器和服务器的通信都是通过 HTTP 协议进行的,那么引入 WebSocket 有什么用呢?想像一下,有一个网页正在用文字直播某一场足球比赛的比分,在没有 WebSocket 时,客户端也就是浏览器实现比分的动态更新通常通过下面两种方式:AJAX 和长轮询。这两种技术有什么区别呢?看下面的例子(S 代表服务器,C 代表客户端):Ajax 方式:C:告诉我最新的比分S:比分还没更新C:(5 秒后)告诉我最新的比分S:比分还没更新C:(5 秒后)告诉我最新的比分S:比原创 2022-03-01 01:24:18 · 1037 阅读 · 0 评论 -
python 代码编写优化
1. 列表推导式只有if…版[item for item in data if condition]# 剔除data中的奇数data = [1, 2, 3, 4, 5, 6, 7, 8, 9]test = [item for item in data if item % 2 == 0]print(test)# 结果[2, 4, 6, 8]此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表if…else… 版模板:[exp1原创 2022-03-01 01:23:49 · 251 阅读 · 0 评论 -
python百题大冲关(1-6)
参考答案仓库:https://github.com/Shallow22/python-1001. 实现一个算法来识别一个字符串的字符是否是唯一的。挑战内容本次挑战中,你需要在 unique_chars.py 文件中补充函数 has_unique_chars 的空缺部分。has_unique_chars 函数接受一个参数,string 用于指定传入的字符串;has_unique_chars 函数输出一个布尔值,即 True 或者 False。你需要补充 has_unique_chars 函数,使其原创 2022-03-01 01:23:33 · 416 阅读 · 0 评论 -
python 工具函数代码(二)
1. 实现一个判断redis 服务器时候存在的装饰器from functools import wrapsfrom flask import gfrom rmon.common.rest import RestExceptionclass ObjectMustBeExist: """该装饰器用于对某一个 Server 实例进行删改查操作,确保操作对象必须存在 """ def __init__(self, object_class): """原创 2022-03-01 01:23:05 · 333 阅读 · 0 评论 -
flask 登录功能流程源码分析
如下图所示,这是我们在之前的实验中编写的登录视图函数,它在 handlers/front.py 文件中:当我们点击登录提交按钮后,首先进行第 42 行的表单验证,通过后,根据邮箱查询 user 数据表中对应的用户信息,然后调用 Flask-Login 提供的 login_user 方法登录。接下来我们继续分析这个方法,它在 flask_login.utils 模块中:在上一节实验我们对这个方法的参数做了说明:user 就是 User 映射类的实例;remember 是布尔值,当用户在表单中选原创 2022-01-21 17:24:25 · 685 阅读 · 0 评论 -
直播技术原理分析
一、技术原理分析在介绍直播技术之前,首先大家需要理解流媒体的概念。所谓流媒体是指采用流式传输的方式在 Internet 播放的媒体格式。流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向客户端连续、实时传送。客户端通过解压软件对这些数据进行解压后,多媒体就会像发送前那样显示出来。理解了流媒体,就不难直播原理了,因为直播也是一种流媒体。只不过相比视频、音乐网站这种传统的流媒体,直播流媒体的数据源是由客户端(主播)产生然后实时推送到服务器的,下面的图片显示了直播的大致流程:原创 2022-01-21 17:11:33 · 8666 阅读 · 0 评论 -
flask 请求处理流程及其源代码分析、session、cookie生成源码
浏览器首次访问网站的注册页面时,request.cookies 里没有 session ,val 的值就是 None 。这时候执行第 345 行返回 self.session_class 的调用,session_class 属性就是当前模块中定义的 SecureCookieSession 类,最后请求上下文对象的 session 属性值就是此类的实例。这个实例是类字典对象,现阶段我们正在处理请求,它里面没有键值对,是空的。下一步就是调用视图函数了:如上图所示,这里涉及到表单类的实例化。在创建表单类时.原创 2022-01-19 01:43:47 · 1012 阅读 · 0 评论 -
flask Flask-Login 插件及继承 UserMixin 类、login_user 源码分析、session源码分析
一、继承 UserMixin 类Flask 项目可以使用 Flask-Login 插件来实现登录功能,这是一个被广泛使用的优质第三方库。登录功能设计用户表,我们要使用 Flask-Login 就需要让 User 映射类继承 UserMixin 类。修改 models.py 如下:from flask_login import UserMixinclass User(Base, UserMixin): ...继承 UserMixin 是干嘛呢?我们看下源码,这个类定义在 flask_l原创 2022-01-19 00:47:54 · 3053 阅读 · 0 评论 -
Flask-SQLAlchemy 初始化源码和蓝图blueprint源码小分析
一. Flask-SQLAlchemy 初始化源码在文件中定义了工厂函数 create_app :def create_app(config): """ 可以根据传入的 config 名称,加载不同的配置 """ app = Flask(__name__) app.config.from_object(configs.get(config)) # SQLAlchemy 的初始化方式改为使用 init_app db.init_app(app)如上所示的原创 2022-01-06 15:23:19 · 1657 阅读 · 0 评论 -
使用Etcd 提升系统健壮性
介绍采用微服务架构的系统里包含许多服务,这些服务之间会互相调用。每个服务一般都有多个节点来提供服务,这些节点是动态变化的。当有节点新增或失效时,需要及时通知到服务调用方,否则调用方可能访问到失效节点,或者忽略掉新增节点。这种分布式系统下服务的可靠性,一般可通过服务注册与发现来达到。使用 Etcd 来实现微服务架构系统的高可用性。目标是使得当各个后台服务节点有新增、删除或异常退出时,前台网站能够及时调整服务调用地址。随着 CoreOS 和 Kubernetes 等项目在开源社区日益火热,它们项目中都用到原创 2022-01-04 17:33:21 · 240 阅读 · 0 评论 -
使用JWT生成Token,并实现Token刷新API
一、背景传统的网站用户认证方式严重依赖于 Cookie 。但 很多 项目是一个前后端分离的项目,我们希望前端界面的实现不受 项目API 的影响,这就要求 用户认证没有 Cookie 时也能进行。其实仔细想想,用户的认证鉴权,无非就是在访问 API 时发送一个能够识别出用户的字符串给服务端,然后服务端基于字符串查找出用户,再判断用户是否有权限使用 API 。这串字符串,我们可以将其称之为 Token。由于 rmon 的所有 API 都是基于 HTTP 协议的,而在 HTTP 协议中有一个 Authoriz原创 2021-12-30 17:27:31 · 6085 阅读 · 0 评论 -
python 基于 Redis 实现缓存系统
Redis 服务器用途非常广泛,例如我们可以基于 Redis 服务器实现缓存系统。缓存系统可以缓解客户端访问压力,当缓存有效时只需直接将缓存结果返回给客户端而不用执行真正的后端逻辑。尝试在 Python 中实现一个简单的缓存系统。要求条件:假设缓存的结果都是 Python 字典,通过 json 进行序列化和反序列化确保实验环境的 Redis 服务器已经启动cache.py 文件中实现一个缓存系统类,类名称为 RedisCache ,可以通过 RedisCache.cache 方法装饰一个函数并缓原创 2021-12-28 18:18:27 · 2408 阅读 · 0 评论 -
python 工具函数代码(一)
1. utc 标准时间转换成本地时间def utc2local(utc_st): '''将utc 标准时间转换成本地时间''' now_stamp = datetime.now().timestamp() local_time = datetime.fromtimestamp(now_stamp) utc_time = datetime.utcfromtimestamp(now_stamp) offset = local_time - utc_time pr原创 2021-12-28 16:18:17 · 8885 阅读 · 0 评论 -
python 函数方法大赏
isinstance(). 判断类型isoformat().它使用日期类对象,并以ISO 8601格式YYYY-MM-DD返回表示日期的字符串。 日期和时间表示的国际标准是ISO8601。该标准旨在提供日期和时间表示的格式>>> from datetime import date>>> p = date.today()>>> k = p.isoformat()>>> k'2021-12-09'>>>.原创 2021-12-15 16:59:41 · 919 阅读 · 0 评论 -
python函数的奇淫技巧——chain()函数
tertools.chain() 方法可以用来简化这个任务。 它接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。对多个对象执行相同的操作,且这几个对象在不同的容器中,这时候就用到了itertools.chain的函数,这个函数就用来干这件事的from itertools import chaina = ['x','r','v','b']b = [1,2,3,4,5]# b = (1,2,3,4,5).# 元祖也可,可迭代对象都可for i in chain原创 2021-11-25 15:59:37 · 2344 阅读 · 0 评论 -
哈希表和字典的异同
一、哈希表三、总结哈希表和字典都是可以存储数据的一个容器,都是以键值对的方式来存储数据,一个键对应一个值,通过键和值来检索数据时是十分有效迅速的,举个简单的例子就是我们的手机的电话薄里面都是一个人对应一个电话号码,检索的时候只有找到键,也就是找到人名,就可以找到电话号码了。 字典的存储结构也是通过哈希表来实现的,所以两者存入数据的方式是一样的,但是两者在执行效率上还是有差别的。存入数据不限制类型和数量,前提是导入命名空间using system.Collection(1)存值时:哈希表以键值对的形式原创 2021-11-19 01:10:33 · 12926 阅读 · 1 评论 -
QPS高并发性能指标及其计算公式
QPS,每秒查询QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。并发数并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。RT,响应时间响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间RT(Response-time),是一个系统最重原创 2021-09-08 15:05:31 · 14231 阅读 · 0 评论 -
flask-web 搜索系统项目实际应用、suggest查询实现、联想提示、自动补全的实现
一、项目全文检索实现elasticsearch python客户端使用https://elasticsearch-py.readthedocs.io/en/master/>pip install elasticsearch对于elasticsearch 5.x 版本 需要按以下方式导入from elasticsearch5 import Elasticsearch# elasticsearch集群服务器的地址ES = [ '127.0.0.1:9200']# 创建ela原创 2021-08-02 15:41:25 · 541 阅读 · 0 评论 -
flask-web—— 搜索系统、Elasticsearch分布式搜索引擎原理、分片与集群、IK中文分析器、索引与文档、Logstash导入数据与查询
一、Elasticsearch简介与原理You know, for search!文档 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html原创 2021-08-02 15:21:08 · 481 阅读 · 0 评论 -
flask web——实时通讯、聊天服务项目、推送通知功能的实现
一、聊天服务实现在toutiao-backend/im目录中创建server.pyimport socketio# 创建sio对象sio = socketio.Server(async_mode='eventlet')app = socketio.Middleware(sio)在toutiao-backend/im目录中创建im服务启动程序main.py运行方式python main.py [端口],如python main.py 8000import eventleteventlet原创 2021-07-29 01:22:34 · 1901 阅读 · 0 评论 -
flask-web—— 即时通讯 IM、WebSocket、Socket.IO 实时推送消息
一、即时通讯简介即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务。HTTP 和TCP之间的关系:原创 2021-07-28 15:40:55 · 2238 阅读 · 0 评论 -
flask-web ——RPC实际项目业务简析
一、需求背景在首页中 获取特定用户的推荐文章列表 需要web系统和推荐系统配合有web系统告知 推荐系统 用户id是谁推荐系统 根据用户id 决定 推荐的文章idweb系统 根据推荐的文章id 查询文章数据,返回给客户端RPC业务实现RPC接口分析调用请求channel_iduser_idarticle_num 推荐的文章数量 10timestamp 时间戳 明确 跟推荐系统索要历史推荐数据还是最新的推荐结果如果timestamp传递的是最新的当前时间,则表明索要新的原创 2021-07-26 16:12:50 · 357 阅读 · 0 评论 -
flask-web —— RPC定义、结构、gRPC、Protocol Buffers
一、RPC简介1. 什么是RPC远程过程调用(英语:Remote Procedure Call,缩写为 RPC,也叫远程程序调用)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用2. 背景与用途在单台计算机中,我们可以通过程序调用来传递控制和数据;或者说通过程序调用,我们可以将多个程序组成一个整体来实现某个功能。如果将这种调用机制推广到多台彼此间可以原创 2021-07-26 15:31:49 · 2223 阅读 · 0 评论 -
flask-web APScheduler 定时任务以及实际应用
定时任务crontabLinux 本身自带的一个命令,由Linux操作系统维护定时任务APSchedulerPython实现的,定时不是由Linux操作系统维护,是单独开启进程的方式,在进程中管理定时定时任务有两种:定时任务进行页面静态化 在django运行起来之前,我们明确知道要有这个定任务不是动态添加的一般可以直接采用Linux crontabAPScheduler在django 程序已经运行的情况下用户1下单 判断在30分钟内必须支付,否则取消订单原创 2021-07-23 01:58:27 · 1249 阅读 · 2 评论 -
python-web 项目导包问题
查看启动文件的路径有些项目有多个启动文件,例如:主程序启动文件,中间件启动文件等结论:当启动文件在最外层,导入里层的子包, 是没有问题的。一旦子包被导入,初始化。那就可以在子包的各个文件中采用 from . import xxx 的导包方式但当某个启动文件在里层,想导入启动文件外部的文件,不能用上述的导包方式,因为启动文件所在的这层目录,没有被初始化过,不是python包。这种的话,可以做目录设置,比如:sys.append()添加解释器路径等方法同级目录导包 直接用 import原创 2021-07-23 01:39:09 · 209 阅读 · 1 评论 -
flask-web—— JWT认证方案
撒旦发射点原创 2021-07-13 01:04:26 · 906 阅读 · 2 评论 -
python 网络编程面试题
怎么实现强行关闭客户端和服务器之间的连接?在 socket 通信过程中不断循环检测一个全局变量(开关标记变量),一旦标记变量变为关闭,则 调 用 socket 的 close 方法,循环结束,从而达到关闭连接的目的。简述 TCP 和 UDP 的区别以及优缺点...原创 2021-06-09 00:32:29 · 1884 阅读 · 6 评论 -
python 复习—并发编程实战(八)——多线程和多进程的生产者消费者模型、线程、进程再总结
任务生产者负责生产数据(随机生成一个数字),消费者负责处理数据(判断生产出来的数据是不是质数)。现在假设有一个生产者和多个消费者。1. 多线程(Thread)的生产者消费者模型import randomimport timeimport mathimport threadingfrom queue import Queueclass Producer(threading.Thread): # 生产者线程 def __init__(self, data, num_sum):原创 2021-06-07 15:15:54 · 192 阅读 · 0 评论 -
python 复习—并发编程实战(七)——并发编程总结
Python并发编程学习并发编程加速程序的运行高薪程序员必备能力程序运行的5种并发粒度单线程单线程多协程多线程多进程多机器怎样选择并发技术如果单机无法搞定大数据计算IO密集型CPU经常在等待IO比如网络爬虫选择1:多协程 coroutine选择2:多线程 threadingCPU密集型计算密集型,CPU计算为主比如加密解密使用多进程multithreading线程池和进程池原理:提前创建好线程/进程放在池子里,新的task原创 2021-06-03 00:13:07 · 167 阅读 · 0 评论 -
python 复习—并发编程实战(六)——线程、多进程、多协程加速程序运行实例(多线程和多进程的对比)
一、多线程实例import threadingimport timelock = threading.Lock()class Account: def __init__(self, balance): self.balance = balancedef draw(account, amount): with lock: if account.balance >= amount: time.sleep(0.1)原创 2021-06-02 23:59:56 · 343 阅读 · 3 评论 -
python 复习—并发编程(四)——IO多路复用、协程
一、铺垫:基于socket发送http请求1、需求一:向百度发送请求搜索关键字“alex”,有如下两种方式: import requests ret = requests.get('https://www.baidu.com/s?wd=alex')方式二(socket方式,也是requests的原理): import socket sk = socket.socket() # 与百度创建连接: 阻塞 sk.connect(('www.baidu.com',8原创 2021-05-27 14:09:41 · 412 阅读 · 0 评论 -
python 复习—并发编程(三)——进程、数据共享、进程锁、进程池、requests模块和bs4(beautifulsoup)模块
一、进程1、进程间数据不共享,每个进程都有自己的一个列表,如下示例: import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) # 每个进程都有自己的一个列表 def run(): for i in range(10): p = multiprocessing.Process(ta原创 2021-05-26 18:06:19 · 145 阅读 · 0 评论 -
python 复习—并发编程(二)——线程锁、threading.local线程池、生产者消费者模型、线程安全
一、线程锁线程安全,多线程操作时,内部会让所有线程排队处理。如:list/dict/Queue线程不安全 + 人(锁) => 排队处理1、RLock/Lock:一次放一个a、创建10个线程,在列表中追加自己,如下代码: import threading v = [] def func(arg): v.append(arg) print(v) for i in range(10): t = threading.Threa.原创 2021-05-26 17:13:30 · 241 阅读 · 1 评论 -
python 复习—并发编程(一)系统并发线程和进程、协程GIL锁、CPU/IO密集型计算
并发编程前言: 1、网络应用 1)爬虫 直接应用并发编程; 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2、运维领域 1)自动化开发-运维开发(机器的批量管理,任务的批量执行等)一、操作系统/应用程序a、硬件 - 硬盘 - CPU - 主板 - 显卡 - 内存 - 电源 . . . . . .b、装原创 2021-05-26 02:07:22 · 427 阅读 · 1 评论 -
python 复习——网络编程(五)——网络基础、ftp任务(上传下载进度条、计算文件大小、断点续传、搭建框架示例)
一、网络基础1、端口,是什么?为什么要有端口?端口是为了将同一个电脑上的不同程序进行隔离。IP是找电脑;端口是找电脑上的应用程序;端口范围:1 – 65535 ; 1 - 1024 不要用 ; 一般程序员用8000、8001……2、OSI 七层模型(理解记住哪七层) 应用层,使用软件; 打开软件或网站 表示层,看到数据,如图片和视频; 生产原始数据 会话层,保持登录或链接状态; 应用偷偷携带一点其他数原创 2021-05-25 17:46:02 · 519 阅读 · 8 评论 -
python 复习——网络编程(三)——网络基础、多线程、ftp任务铺垫
一、网络基础学习网络编程,了解一些网络基础的知识是必不可少的,下面学习一些基础的网络知识:1、我们的电脑里有网卡,网卡里有mac地址;2、我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。 IP: 192.168.13.84 IPv4 00000000.00000000.00000000.00000000 0~255 0~255 0~255原创 2021-05-25 16:23:57 · 170 阅读 · 0 评论 -
python 复习——网络编程(四)——文件上传下载、socketserver(并发)、解读socketserver源码
一、文件上传/下载1、文件上传/下载学习了socket套接字,我们现在可以写一个文件上传/下载的程序,如下示例: 服务端代码: import socket import json server = socket.socket() server.bind(('127.0.0.1',8899)) server.listen(5) while 1: print("server is working....") conn,add原创 2021-05-25 14:51:29 · 328 阅读 · 0 评论 -
python 复习——网络编程(二)模拟ssh、黏包、hashlib模块
一、模拟ssh1、subprocess模块subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands.*等。subprocess模块可用于产生进程,并连接到进程的输入/输出/错误输出管道,并获取进程的返回值。 import subprocess res = subprocess.Popen("dir", shell=Tr原创 2021-05-25 01:55:03 · 231 阅读 · 0 评论 -
python 复习——网络编程(一)——面向对象多继承(c3算法)、网络基础和编写网络相关的程序
一、面向对象多继承(c3算法)a、有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') class C(A,B): pass obj = C() obj.f1() print(C.__mro__) # 打印出C类的继承顺序,结果如下一行: # (<class '原创 2021-05-25 00:27:08 · 318 阅读 · 0 评论