python
python学习
白小白的小白
你知道的越多,你不知道的越多!
展开
-
python中async/await的理解和使用
python async await 事件循环原创 2022-10-26 15:52:42 · 4578 阅读 · 0 评论 -
python环境管理anaconda
anaconda python原创 2022-09-23 14:56:54 · 555 阅读 · 0 评论 -
ubuntu换源并下载python3.8
ubuntu python 换源原创 2022-08-08 10:31:05 · 1640 阅读 · 1 评论 -
归并排序原理
python 归并排序 原理原创 2022-07-28 17:43:52 · 859 阅读 · 0 评论 -
python实现跳跃表SkipList
单向有序链表 跳跃表 对比 skiplist原创 2022-07-28 11:17:50 · 691 阅读 · 1 评论 -
python实现单向有序链表
python 单向 有序 链表原创 2022-07-26 14:55:14 · 250 阅读 · 0 评论 -
python中redis incr的使用
在一些项目中,有时候需要记录一些数字,比如需要知道每天微信推送了多少条模板消息或者其他的一些需求,或者一个功能:用户扫码当天达到20次即不再让用户扫码,或者秒杀活动中,这件商品只规定卖200件,如果我们使用数据库来作为查询,那么并发量特别大,db就会抗不住,我们就需要用中间件来削峰,并且配合redis, 当然,我们的电商项目肯定没有那么大,并发量也不会那么大,为了避免超卖,我们使用mysql中的乐观锁也可以,但是为了更快,我们就可以使用redis中的incr来提高效率为什么可以使用redis中的incr.原创 2021-05-31 16:04:41 · 2830 阅读 · 0 评论 -
python中的继承
在Java中是不支持多继承的,但是在python中是可以多继承的,但是多继承中,python2中如果是经典类则是深度优先,新式类是广度优先,但是在python3中则是舍弃了这两种继承方式,而是采用C3算法,那么C3算法的主要是依靠merge,那么根据代码来看看merge如何实现的class SSClass(object): def __init__(self): print('我是最高级父类初始化') def my_func(self): print(.原创 2021-05-20 12:09:35 · 117 阅读 · 0 评论 -
设计模式的六大原则
1. 单一职责原则(Single Responsibility Principle,简称SRP ) 1 核心思想:应该有且仅有一个原因引起类的变更 2 问题描述:假如有类Class1完成职责T1,T2,当职责T1或T2有变更需要修改时,有可能影响到该类的另外一个职责正常工作。 3 好处:类的复杂度降低、可读性提高、可维护性提高、扩展性提高、降低了变更引起的风险。 4 需注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可转载 2021-05-10 11:13:38 · 92 阅读 · 0 评论 -
django使用装饰器来验证权限
在django项目中,我们需要验证权限等,使用django封装的不能够准确的提醒用户是缺少什么权限,所以我们就可以使用装饰器在视图上来进行权限管理装饰器的原理:闭包,在函数内部定义一个函数,并且这个函数用到了外部函数的变量,那么将这个函数以及用到的变量称之为闭包视图代码:from django.utils.decorators import method_decoratorfrom users.decorator import set_func, DecoratorClass# @meth.原创 2021-05-09 10:31:07 · 1076 阅读 · 0 评论 -
rabbitmq在python中实现延时队列(库存回滚)
RabbitMQ延时队列实现1.1 消息的TTL消息的TTL(Time To Live)就是消息的存活时间,单位是毫秒 RabbitMQ 可以对队列和消息分别设置TTL对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就是死了,称之为死信如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。可以通过设..原创 2021-05-07 15:15:44 · 704 阅读 · 0 评论 -
rabbitmq在python中实现流量削峰
在电商项目中,一但有秒杀活动,一瞬间进来的请求较多,假设一秒中进来的请求2万,但是数据库的并发只有2000,那么如果不做限制的话,db一下就会被打死或者导致很卡,那么就可以利用rabbitmq的ack机制prefetch_count(限制未处理消息的最大值)来平缓的取出数据来进行数据库的操作import threading, timeimport pikaclass SingletonClass(object): """单例模式用来少创建连接""" # 加锁,防止并发较高时,同.原创 2021-04-29 14:26:58 · 504 阅读 · 0 评论 -
rabbitmq在python中的topic主题模式封装
主题模式和路由模式类似,不过主题模式支持模糊匹配(类似正则),但匹配规则又与常规的正则表达式不同,比如“#”是匹配全部,“*”是匹配一个词import threadingimport pikaclass SingletonClass(object): """单例模式用来少创建连接""" # 加锁,防止并发较高时,同时创建对象,导致创建多个对象 _singleton_lock = threading.Lock() def __init__(self, user.原创 2021-04-28 23:19:43 · 663 阅读 · 0 评论 -
rabbitmq在python中的routing路由模式封装
routing路由模式:消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;根据业务功能定义路由字符串从系统的代码逻辑中获取对应的功能字符串,将消息任务扔到对应的队列中业务场景:error 通知;EXCEPTION;错误通知的功能;传统意义的错误通知;客户通知;利用key路由,可以将程序中的错误封装成消息传入到消息队列中,开发者可以自定义消费者,实时接收错误原创 2021-04-28 21:40:47 · 224 阅读 · 0 评论 -
rabbitmq在python中的发布订阅模式封装
publish/subscribe发布订阅模式:消息产生者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费,代码的执行效率不高相关场景:邮件群发,群聊天,广播(广告)import threadingimport pikaclass SingletonClass(object): """单例模式用来少创建连接""" # 加锁,防止并发较高时,同时创建对象,导致创建多个对象 _singleton_lock = threa原创 2021-04-28 21:17:59 · 321 阅读 · 0 评论 -
rabbitmq在python中的work工作模式封装
import threadingimport pikaclass SingletonClass(object): """单例模式用来少创建连接""" # 加锁,防止并发较高时,同时创建对象,导致创建多个对象 _singleton_lock = threading.Lock() def __init__(self, username='baibing', password='123456', ip='ip', port=5672, data={}):原创 2021-04-28 17:05:35 · 434 阅读 · 0 评论 -
rabbitmq中的流量控制
1.流量控制的说明:开启客户端最大的未处理消息队列大小2. 在python中的应用:channel.basic_qos(prefetch_count=1)import pikacredentials = pika.PlainCredentials('baibing', '123456')connection = pika.BlockingConnection(pika.ConnectionParameters(host='47.111.87.61', port=5672, credentials原创 2021-04-28 11:54:58 · 700 阅读 · 0 评论 -
rabbitmq在python中的应用
文章参考地址:地址下载pika,python 连接操作rabbitMQ 主要是使用pika库:pip install pika==1.0.1编写生产者代码:import pikaimport base64, timecredentials = pika.PlainCredentials('用户名', '密码')# 1、连接rabbitmq服务器connection = pika.BlockingConnection(pika.ConnectionParameters(host='ip',原创 2021-04-28 11:28:45 · 390 阅读 · 1 评论 -
django 中如何将两个查询集合并
在我们项目中,由于各种原因或者分表后,我们需要查询两个表然后将其合并并排序来序列化返回给前端,那么我们合并查询集:代码:# -*- coding: utf-8 -*-# !/usr/bin/python3import os, datetime, time, random,base64, jsonimport sysimport oss2BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__fi原创 2021-04-27 11:37:38 · 1831 阅读 · 0 评论 -
csdn博客的各种操作
将字体变为红色<font color=#900>用于复制</font>不断行的空白格 半方大的空白格 全方大的空白格 不能改变样式`用于复制`原创 2021-04-23 15:38:20 · 125 阅读 · 0 评论 -
python中GIL及其延深
1. GIL是什么 1.1 python是解释型语言,不用编译,运行时可以直接通过解释器进行解释执行了。类似linux中的bash解释器,所以python中也有很多解释器,如cpython(C语言实现),jpython等,只是默认的解释器Cpython,所以大家一般使用的python环境都是基于Cpython的。我们所说的Python GIL是Global Interpreter Lock,翻译过来就是:全局解释器锁,我们从GIL的名字就可看出其是一个解释器锁,针对的主题是解释器。所以GIL并不是Pyt转载 2021-04-23 11:46:32 · 269 阅读 · 0 评论 -
Python中对多态的支持和使用
转载:地址转载 2021-04-23 09:13:10 · 117 阅读 · 0 评论 -
python中的队列
先说一下队列的常用命令,在python2中的导入为:from Queue import Queue 在python3中的导入为:from queue import Queue,不然就会报错Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。那为什么说线程是安全的,因为python的多线程其实是.原创 2021-04-16 11:25:08 · 1750 阅读 · 0 评论 -
python rsa非对称加密
下载安装包:pip install pycryptodome使用脚本生成私钥和密钥:from Crypto import Randomfrom Crypto.PublicKey import RSArandom_generator = Random.new().readrsa = RSA.generate(2048, random_generator)# 生成私钥private_key = rsa.exportKey()print(private_key.decode('utf-8').原创 2021-03-18 11:32:08 · 299 阅读 · 0 评论 -
python ip与int相互转换
在项目中,我们经常会保存用户的ip,做一些判断,但是由于sql效率的原因,存整形比较好,所以,我们要把ip转化为int,如何转化那?def int_ip(num): s = [] for i in range(4): s.append(str(num %256)) num //= 256 return '.'.join(s[::-1])def ip_int(ip): res = 0 for j, i in enumerate(i.原创 2021-03-17 10:49:09 · 795 阅读 · 0 评论 -
python红包转账高并发处理
最近项目中有一个功能,就是转账红包(即时提现到支付宝,秒到账),每天限制用户提现一次,刚开始,每天和支付宝对账的时候都能对上,但是后来随着用户的增多,每天几万人提现,并发量上来了,发现有时候账单对不上,后来发现死锁了,然后使用事务并优化代码,这个问题解决了,随着时间的推移,突然发现有些用户提现了一次,支付宝给他连续转账了好几次,有的甚至几十次,然后看代码逻辑,怎么都没有发现问题,后来给支付宝提工单,支付宝那边回复是我这边连续调了转账接口好多次,然后就在思考这是为什么?由于每个用户每天只能提现一次,所以请原创 2021-03-16 10:40:42 · 292 阅读 · 0 评论 -
python中可逆的加密方式
django中的SessionBasefrom django.contrib.sessions.backends.base import SessionBasenum = random.randint(1, 999)session_obj = SessionBase()data = {'num':num, 'app_id': 123456786987, 'user_id': 234242342340}data_str = session_obj.encode(data) # 编码为字符串.原创 2021-03-12 16:10:37 · 1174 阅读 · 1 评论 -
python排序
冒泡排序(时间复杂度:最优O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束 最差O(n的平方))def test(list1): n = len(list1) for i in range(n): for j in range(0, n-i-1): if list1[j] > list1[j+1]: list1[j], list1[j+1] = list1[j+1], list1[j]lis.原创 2021-03-05 10:26:39 · 83 阅读 · 1 评论 -
django中model中的外键删除
on_delete = models.CASCADE删除关联数据的时候,与之的关联也删除on_delete = models.DO_NOTHING删除关联数据的时候,什么操作也不做on_delete = models.PROTRCT删除关联数据的时候,引发报错on_delete = models.SET_NULL删除关联数据的时候,与之关联的只设置为空on_delete = models.SET_DEFAULT删除关联数据的时候,与之关联的只设置为默认值on_delete = models.SET原创 2021-03-04 17:07:42 · 565 阅读 · 1 评论 -
python内置函数
dicttuple_data1 = [('one', 1), ('two', 2), ('three', 3)]tuple_data2 = zip(['one', 'two', 'three'], [1, 2, 3])dict_data1 = dict(tuple_data1)dict_data2 = dict(tuple_data2)dict_data3 = dict(one=1, two=2, three=3)print(dict_data1)print(dict_data2)pri.原创 2021-02-26 11:00:44 · 117 阅读 · 0 评论 -
centos下安裝python
更新系统文件yum updateyum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make下载安装包并解压wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xztar -xf Python-3.7.6.tar.xz编译安装.原创 2021-02-02 12:36:13 · 300 阅读 · 0 评论 -
django + uwsgi添加并发量
我们公司有个项目,用户突破了十万,导致页面非常卡,当初是怀疑是数据库的数据太多的原因,然后就添加索引,结果还是那么慢,我就通过时间去查询到底是哪一句sql比较慢,结果发现查询sql还是很快啊,没有超过一秒都出来了,然后怀疑是数据库的并发数量小了,然后设置大一点,发现还是很慢,实在找不出来原因的时间,我在日志中找到了如下的标志:Mon Jan 25 17:29:11 2021 - *** uWSGI listen queue of socket ":8001" (fd: 3) full !!! (101/1原创 2021-01-25 18:50:18 · 2021 阅读 · 0 评论 -
阿里云oss上传图片
在项目开发过程中,文件存储无非就是第一,存放到我们自己的服务器,但是这种方式有一个很大的弊端就是随着用户的增加,存放到服务器的数据或者图片越来越多,那么就会很占服务器的带宽,这样后期会很影响服务器的性能,导致卡顿,第二就是使用阿里云的oss数据存储,但是注意,阿里云的域名需要配置一下,不然我们后端返回给前端的url,前端拿到url后拉取图片,会报跨域错误,配置下就可以了,阿里云存储文件有两种方式:当用户上传图片时,前端向我们后端去请求一个接口,后端向阿里云要一个token,然后后端把拿到的token返回原创 2021-01-21 09:51:56 · 1169 阅读 · 0 评论 -
基于django搭建文件存放服务器
在我们的工作中,有的公司不会让你使用阿里云服务器来存放图片,而是要存放在自己的服务器,这就很烦人,但是我们也要搞啊,models:from uuid import uuid4from django.contrib.auth.models import AbstractUserfrom django.db import modelsfrom itsdangerous import JSONWebSignatureSerializer as JWSSerializer# Create your m原创 2021-01-08 17:39:08 · 1627 阅读 · 0 评论 -
python生成链接二维码
django生成链接二维码,用户扫码之后跳转到指定链接(生成的二维码图片转成了base64,前端收到之后需要转成图片即可):import qrcode, base64from io import BytesIOfrom django.http import HttpResponseclass LinkCodeAPIView(APIView): """链接二维码""" def get(self, request): status_http = 'http://'原创 2021-01-07 11:48:42 · 1094 阅读 · 0 评论 -
python为图片盖印章
为图片盖印章,印章首先也要是一张图片:代码:from PIL import Imageclass ImageStampAPIView(GenericAPIView): """给图片盖章功能""" permission_classes = [IsAuthenticated] def get(self, request): im = Image.open("/home/sundries/1.png") # 图片 stamp原创 2021-01-07 11:31:56 · 1602 阅读 · 1 评论 -
python为图片添加中文汉字水印
在django中为汉字添加水印:import PILfrom PIL import Image, ImageDraw, ImageFontclass ImageWatermarkAPIView(GenericAPIView): """给图片添加水印""" permission_classes = [IsAuthenticated] def get(self, request): # 设置所使用的字体和字体的大小(注意有的字体中文是画不出来的)原创 2021-01-07 10:57:48 · 843 阅读 · 0 评论 -
微信公众号分享链接到微信 qq的python后台代码
微信公众号分享微信 微博 qq的python后台代码:import randomimport requestsimport timeimport hashlibimport django_redisimport loggingfrom random import Randomfrom api_users.WeChatOauth import conflogger = logging.getLogger('django')class ApiWeChatSharePay(object原创 2021-01-06 15:17:33 · 549 阅读 · 1 评论 -
centos7下使用python将docx变为pdf
在centos中将docx变为pdf需要libreoffice包来支撑,有了libreoffice,则方便了多下载libreoffice,可以去官网下载最新版本,然后在centos中安装,libreoffice官方网址:libreoffice官方网址安装libreoffice:解压:tar -zxvf LibreOffice_7.0.4_Linux_x86-64_rpm.tar.g(我这里下载的最新的)cd LibreOffice_7.0.4.2_Linux_x86-64_rpmcd RP原创 2021-01-05 15:24:07 · 1626 阅读 · 3 评论 -
django中怎么使用mysql数据库的事务
在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败,Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交。我们需要在保存数据库操作中自己控制数据库事务的执行流程在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法:装饰器的用法(在这个函数下如果报错,那么这个函数中所有sql语句都会撤销):from django.db impo原创 2020-12-25 10:39:16 · 408 阅读 · 0 评论