python整理
基础
collections模块
python-内置函数
python异常
递归函数
python匿名函数
python高阶函数
装饰器基础
python面向对象
python魔法方法
python中的callable概念
多任务
python多任务机制
ThreadPoolExecutor和ProcessPoolExecutor
asyncio异步IO
网络通信
简单WEB服务器
多种方式实现并发WebServer
算法
经典排序算法总结与实现
理论剖析
python垃圾回收机制
GIL全局解释器锁
CPython的内存概念:栈、堆和引用
python内存管理
python变量作用域
项目集成
装饰器常见应用
对象持久化
time与timeit模块
python-Re模块
python正则匹配
python实现超时退出
python集成redis
JWS的python实现方案
python自动化测试
Django3.2和WebSocket
在这篇文章中,将在 Django 应用程序中启用 WebSocket,而无需安装第三方应用程序。
Django 从 3.0 版本开始引入了 ASGI 接口,并在 3.1 版本中引入了异步视图。我们的解决方案将基于异步视图。
在本教程中,我们将使用 Python 3.7 和 Django 3.2。
WebSocket ASGI 接口介绍ASGI 是为我们服务多年的旧 WSGI 协议的替代协议,它将在未来 2-3 年内成为 Python Web 框架中的事实标准。
那么,WebSocket 在这种情况下是如何工作的呢?
WebSocket 客户端和服务器应用程序之间的通信是基于事件的。
ASGI 规范定义了两种类型的事件:发送和接收。
接收事件: 这些是客户端发送到服务器应用程序的事件:
websocket.connect 当客户端尝试与我们的应用程序建立连接时发送
websocket.receive 当客户端向我们的应用发送数据时发送
websocket.disconnect 告诉我们客户端已断开连接。
发送事件: 是由服务器应用程序发送到客户端(例如浏览器):
websock ...
docker系列-docker命令
容器生命周期创建并启动容器
基于mysql 5.7版本的镜像
--name: 指定容器名字为mysql3307
-p: 端口映射,将容器内的3306的端口号与本地主机的3307进行映射
-v: 路径映射,将容器内的/var/lib/mysql/与本地主机的~/mysql/进行映射
-d: 代表后台运行容器,返回容器ID
-i: 代表需要进行容器内,进入交互模式
-t: 指定进入模式时,所使用的终端工具,一般it是绑定使用
容器的名字和ID都是唯一的,对容器进行操作时,通过容器名或ID都可以找到唯一的容器
1docker run -itd --name="mysql3307" -p 3307:3306 -v ~/mysql3307/conf/:/etc/mysql/ -v ~/mysql3307/data:/var/lib/mysql -v ~/mysql3307/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD="mysql" mysql:5.7 /bin/bash
创建容器
1docker cr ...
python集成ES
ElasticSearchelaticsearch:Elasticsearch 的官方低级客户端。它的目标是为 Python 中所有与 Elasticsearch 相关的代码提供基础操作,类似于pymysql。
安装1pip install elasticsearch
链接123456789101112from elasticsearch import Elasticsearches = Elasticsearch( ['localhost:9200'], # 启动前嗅探es集群服务器 # sniff_on_start=True, # es集群服务器结点连接异常时是否刷新es节点信息 # sniff_on_connection_fail=True, # 每60秒刷新节点信息 # sniffer_timeout=60)
索引12345# 在创建索引时忽略由 IndexAlreadyExistsException 引起的 400 已经存在rs = es.indices.create(index='employee& ...
python-Re模块
正则表达式 re 模块是 python 独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。
注意:
re 模块是 python 独有的
正则表达式所有编程语言都可以使用
规则字符
元字符
说明
.
匹配除换行符以外的任意字符
\w
匹配字母或数字或下划线
\s
匹配任意的空白符
\d
匹配数字
\n
匹配一个换行符
\t
匹配一个制表符
\b
匹配一个单词的结尾
^
匹配字符串的开始
$
匹配字符串的结尾
\W
匹配非字母或数字或下划线
\D
匹配非数字
\S
匹配非空白符
[...]
匹配字符组中的任一字符
[^...]
匹配除了字符组中字符的所有任一字符
`a
b`
(ab)
匹配括号内的表达式,即将括号中字符作为一个分组
\num
引用分组num匹配到的字符串
量词
量词
说明
*
零次或无限次
+
一次或无限次
?
零次或一次
{n}
n ...
python集成redis
Python中使用Redis使用 python 操作 redis,可以安装一个第三方库,名字就叫做 redis。它提供了一些接口,能够使我们更加方便的操作 redis。
安装1pip install redis
普通连接python 操作 redis,需要通过一个 redis 连接对象来进行:
123456789101112131415In [1]: import redisIn [2]: conn = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)In [3]: conn.set('k11', 11) # 操作成功,返回True。否则,返回FalseOut[3]: TrueIn [4]: conn.get('k11') # 返回的都是字符串Out[4]: '11' In [9]: conn.rpush('names', 1, 2, 3, 4)Out[9]: 4In [10]: con ...
Redis高级特性-事务
事务可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行执行而不会被其它命令插入,不许加塞。
一个队列中,一次性、顺序性、排他性的执行一系列命令
命令下表列出了 redis 事务的相关命令:
序号
命令及描述
1
DISCARD 取消事务,放弃执行事务块内的所有命令。
2
EXEC 执行所有事务块内的命令。
3
MULTI 标记一个事务块的开始。
4
UNWATCH 取消 WATCH 命令对所有 key 的监视。
5
WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
案例
正常执行事务
123456789101112131415127.0.0.1:6379> MULTIOK127.0.0.1:6379> set k1 1QUEUED127.0.0.1:6379> set k2 2QUEUED127.0.0.1:6379> get k2QUEUED127.0.0.1:6379> set ...
Redis高级特性-主从复制
主从复制概念所谓的主从复制,就是主机数据更新后根据陪着和策略。自动同步到备机的master/slave 机制。master以写为主,slave以读为主。
可以达到:读写分离,容灾恢复
原理Slave启动成功连接到master后会发送一个sync命令
Master接到命令启动后台的存盘进程,同时收集所有接收到的用修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接naster,一次完全同步(全量复制)将被自动执行
缺点由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
案例配从库,不配主库
从库配置
replicaof <masterip> <master ...
Redis高级特性-发布订阅
发布订阅进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
命令下表列出了 redis 发布订阅常用命令:
序号
命令及描述
1
PSUBSCRIBE pattern pattern ... 订阅一个或多个符合给定模式的频道。
2
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
3
PUBLISH channel message 将信息发送到指定的频道。
4
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。
5
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。
6
U ...
Redis高级特性-持久化
持久化Redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDBRDB(Redis DataBase): 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。它恢复时是将快照文件直接读到内存里。
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一 ...
Redis高级特性-配置文件解析
Unit1234567891011# Note on units: when memory size is needed, it is possible to specify# it in the usual form of 1k 5GB 4M and so forth:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes## units are case insensitive so 1GB 1Gb 1gB are all the same.
配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit
对大小写不敏感
INCLUDE123456789101112131415# Include one or more other config files here. This is useful if you# ...
Redis基础教程
Redis概念Redis:REmote Dictionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
优势
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
Redis不仅仅支持简单的key-value类型的数据,同时还提供list, set, zset, hash等数据结构的存储
Redis支持数据的备份,即master-slave模式的数据备份
单进程
Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。
单线程还能这么快
第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础。
第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件 ...