<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BSSZDS930的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BSSZDS930</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BSSZDS930]]></copyright><item><title><![CDATA[Python aiohttp异步请求]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/118028621</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/118028621</guid><author>BSSZDS930</author><pubDate>Fri, 18 Jun 2021 16:34:55 +0800</pubDate><description><![CDATA[requests只能发送同步请求；
aiohttp 只能发送异步请求；
httpx既能发送同步请求，又能发送异步请求。
本地测试：批量下载78张图(线上环境稍快些)：

同步下载： requests大概40s。

改进：用requests.post每次都会创建新连接，速度较慢。而如果首先初始化一个 Session，那么 requests 会保持连接，从而大大提高请求速度。


异步下载：requests大概18s.
异步下载：asyncio大概12s.

aiohttp异步请求

安装：pip3 insta]]></description><category></category></item><item><title><![CDATA[Python 性能分析]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117994008</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117994008</guid><author>BSSZDS930</author><pubDate>Thu, 17 Jun 2021 15:33:36 +0800</pubDate><description><![CDATA[文章目录耗时分析datetimetime自定义装饰器timeitcProfile性能分析工具参考文献
耗时分析
datetime
from datetime import datetime

beg = datetime.now()
#long running
end = datetime.now()
print((end - beg).seconds)

time
import time

start = time.time()
#long running
end = time.time()
print(]]></description><category></category></item><item><title><![CDATA[Python asyncio模块]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117787290</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117787290</guid><author>BSSZDS930</author><pubDate>Fri, 11 Jun 2021 10:54:59 +0800</pubDate><description><![CDATA[文章目录运行协程1. asyncio.run()源码2. await 一个协程3. asyncio.create_task():  并发运行多个协程create_task其他event loop运行/停止事件循环进阶：区别比较asyncio.gatherasyncio.waitasyncio.sleepasyncio.shield事件循环示例loop.run_until_complete(asyncio.wait(tasks))文献：

async:定义一个协程(coroutine)。【协程函数】调用不会立]]></description><category></category></item><item><title><![CDATA[Python 压缩包]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117785888</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117785888</guid><author>BSSZDS930</author><pubDate>Thu, 10 Jun 2021 17:05:32 +0800</pubDate><description><![CDATA[创建文件(夹)
import os
import shutil

# 创建文件夹
os.mkdir()    # 创建路径中最后一级目录，如果之前目录不存在会报错!!!
os.makedirs() # 创建多层目录，如果之前目录都不存在会自动创建；如果已存在会报错. exist_ok=False/True.


os.remove(path)      # 删除文件
os.removedirs(path)  # 删除空文件夹
os.rmdir(path)       # 删除空文件夹
shutil.rmtr]]></description><category></category></item><item><title><![CDATA[Python pyinstaller打包应用程序]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117749387</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117749387</guid><author>BSSZDS930</author><pubDate>Wed, 09 Jun 2021 17:37:00 +0800</pubDate><description><![CDATA[pyinstaller打包机制：即使没有python环境，依然可以运行。

PyInstaller分析你的python程序，找到所有的依赖项。然后将依赖文件和python解释器放到一个文件夹下或一个可执行文件中。
-F，-onefile  产生单个可执行文件
-D，--onedir  产生一个目录（包含多个文件）作为可执行程序
-a，--ascii	  不包含 Unicode 字符集支持
-d，--debug	  产生 debug 版本的可执行文件
-i 指定图标
-w，--windowed，--noco.]]></description><category></category></item><item><title><![CDATA[Python setuptools打包工具]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117747823</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117747823</guid><author>BSSZDS930</author><pubDate>Wed, 09 Jun 2021 17:08:51 +0800</pubDate><description><![CDATA[setuptools工具
pip install setuptools
相关命令

setup.py build        will build the package underneath ‘build/’
setup.py install      will install the package
sdist --formats=tar,zip  打包成源码发布，生成.tar和.zip两个格式文件

默认.tar.gz格式


bdist_egg  预先构建好的可执行文件，所以安装更快。

官方推荐]]></description><category></category></item><item><title><![CDATA[Django Model模块加载]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117669425</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117669425</guid><author>BSSZDS930</author><pubDate>Mon, 07 Jun 2021 19:00:06 +0800</pubDate><description><![CDATA[文章目录metaclassModelBaseModel参考文献
metaclass
ModelBase
# from django.db.models impor ModelBase

class ModelBase(type):
    """Metaclass for all models."""
    def __new__(cls, name, bases, attrs, **kwargs):
    	pass

	def add_to_class(cls, name, value):
	   ]]></description><category></category></item><item><title><![CDATA[数据结构——跳表]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117631092</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117631092</guid><author>BSSZDS930</author><pubDate>Sun, 06 Jun 2021 17:21:14 +0800</pubDate><description><![CDATA[文章目录跳表空间复杂度分析查找/插入的时间复杂度:索引动态更新
平衡数据结构有：B树，红黑树，AVL树，Splay Tree, Treep等
跳表

主要思想就是空间换时间，逐层建立索引，加速查找与插入O(logn)

空间复杂度分析
假设一个链表有 n 个结点，如果每两个结点抽取出一个结点建立索引的话，那么第一级索引的结点数大约就是 n/2，第二级索引的结点数大约为 n/4，以此类推第 m 级索引的节点数大约为 n/(2m)，我们可以看出来这是一个等比数列。这几级索引的结点总和就是 n/2+n/4+n/8]]></description><category></category></item><item><title><![CDATA[Python PIL 图片处理]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572392</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572392</guid><author>BSSZDS930</author><pubDate>Fri, 04 Jun 2021 20:09:04 +0800</pubDate><description><![CDATA[quality： 保存图像质量，值范围从1（最差）到95（最佳）。

默认值为75，使用中应尽量避免高于95的值;
100会禁用部分JPEG压缩算法，并导致大文件图像质量几乎没有任何增益。

from PIL import Image
import requests

# 原图下载
resp = requests.get(url)
with open(path, 'wb') as f:
	f.write(resp.content)

# 下载图片失真(原图9.1M)
resp = requests.get(]]></description><category></category></item><item><title><![CDATA[超好用的快捷方式]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572371</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572371</guid><author>BSSZDS930</author><pubDate>Fri, 04 Jun 2021 20:07:08 +0800</pubDate><description><![CDATA[网页全屏截图：

网页右键  &gt;&gt;  检查  (或F12)
Shift + Command + P，输入“screen”，选择Capture full size screenshot


]]></description><category></category></item><item><title><![CDATA[内存相关问题]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572174</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117572174</guid><author>BSSZDS930</author><pubDate>Fri, 04 Jun 2021 19:58:03 +0800</pubDate><description><![CDATA[8 bit  =1 Byte(字节)
1024 Byte = 1 KB
1024 KB = 1 MB  = 2^20
1024 MB = 1 GB  = 2^30
1024 GB = 1 TB  = 2^40

Python
import sys
v.__sizeof__()   # 单位bytes
sys.getsizeof(v) 

Golang
import "unsafe"

unsafe.Sizeof(v)


]]></description><category></category></item><item><title><![CDATA[Redis知识点]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117564915</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117564915</guid><author>BSSZDS930</author><pubDate>Fri, 04 Jun 2021 16:32:24 +0800</pubDate><description><![CDATA[Redis跳表
Redis内部数据结构之跳表
深入理解Redis跳跃表的基本实现和特性
核心思想是“剪枝”
zset有序列表：支持随机插入和删除，唯一且有序。

单链表：查找O(N)
跳表: 加多级索引实现二分查找，查找、插入、删除O(logN)

每个跳跃表节点的层高都是 1 至 32 之间的随机数。



动态更新
当不停往跳表中插入数据时，如果不更新索引，就可能出现某 2 个索引结点之间数据非常多的情况。极端情况下，跳表会退化成单链表。

跳表是通过随机函数来维护前面提到的 平衡性。 往跳表中插入数据]]></description><category></category></item><item><title><![CDATA[Golang 接口请求高并发]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117554422</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117554422</guid><author>BSSZDS930</author><pubDate>Fri, 04 Jun 2021 14:47:36 +0800</pubDate><description><![CDATA[场景：分群用户推荐业务数据。

方案1：直接启用goroutine

高并发的场景下，不对 goroutine数进行控制，你的 CPU 使用率暴涨，内存占用暴涨，直至程序奔溃。如果此操作落地至数据库，例如 mysql,那么相应的，你数据库的服务器磁盘IO、网络带宽 、CPU负载、内存消耗都会非常高，小心崩溃。
CPU翻倍，高峰期更甚。

func RecHandler(w http.ResponseWriter, r *http.Request) {
    var wg sync.WaitGroup

 ]]></description><category></category></item><item><title><![CDATA[Django 依赖包err]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117445788</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117445788</guid><author>BSSZDS930</author><pubDate>Tue, 01 Jun 2021 16:22:52 +0800</pubDate><description><![CDATA[python 依赖包ERR

关于win-Python中 from Crypto.Cipher import AES这个死活报错的问题


C:\Python2\Lib\site-packages路径下文件夹crypto的首字母改成大写，即是Crypto.


editdistance 乱码


cpp文件去掉日文注释


Socket Error启动乱码：


port占用！！kill进程。


windows下python2.7 安装pycrypto库报错 https://www.cnblogs.com]]></description><category></category></item><item><title><![CDATA[linux 命令： shell、crontab]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117426628</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117426628</guid><author>BSSZDS930</author><pubDate>Mon, 31 May 2021 20:09:19 +0800</pubDate><description><![CDATA[tail vs less
&gt; tail  -n    1000：显示最后1000行
&gt; tail  -n    +1000：从1000行开始显示，显示1000行以后的
&gt; head   -n  1000：显示前面1000行
&gt; tail  -f  log.out      实时查看运行日志
&gt; 从第3000行开始，显示1000行。即显示3000~3999行
cat filename | tail -n  +3000 | head -n 1000
&gt; 显示1000行到300]]></description><category></category></item><item><title><![CDATA[Python 文件读写]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117412775</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117412775</guid><author>BSSZDS930</author><pubDate>Mon, 31 May 2021 14:17:46 +0800</pubDate><description><![CDATA[sys模块
sys.argv            # 命令行参数List，第一个元素是程序本身路径
sys.modules.keys()  # 返回所有已经导入的模块列表
sys.path  # 返回模块的搜索路径，初始化时使用PYTHONPATH环境变量的值
sys.stdin.readline    # 从标准输入读一行
sys.stdout.write("a") # 屏幕输出a

os 模块
os.remove()       #删除文件
os.rename()       #重命名文件
os.wa]]></description><category></category></item><item><title><![CDATA[Python URL模块]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117332919</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117332919</guid><author>BSSZDS930</author><pubDate>Thu, 27 May 2021 17:19:21 +0800</pubDate><description><![CDATA[from urllib.parse import *
 
params = {
    'name': 'germey',
    'age': 22
}
base_url = 'http://www.baidu.com?'

urlencode + parse_qs
&gt; urlencode(params)  # 输出：'name=germey&amp;age=22'
&gt; parse_qs('name=germey&amp;age=22')  # 输出：{'name': ['germey'], ]]></description><category></category></item><item><title><![CDATA[Django 加载settings配置]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117330387</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117330387</guid><author>BSSZDS930</author><pubDate>Thu, 27 May 2021 16:06:12 +0800</pubDate><description><![CDATA[manage.py

设置DJANGO_SETTINGS_MODULE环境变量
调用django.setup()启动

import os, sys

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')
    try:
        from django.core.management import execute_from_command_line
    except Impor]]></description><category></category></item><item><title><![CDATA[Django 时区问题]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117329461</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117329461</guid><author>BSSZDS930</author><pubDate>Thu, 27 May 2021 15:18:31 +0800</pubDate><description><![CDATA[select now();   查看MySQL时间.如果时间和你本地当前时间一致 ,说明mysql的时间没有问题
当启用时区支持，Django 在数据库以 UTC 存储日期信息，在模板和表单中用时区转换为最终用户的时区。

数据库中的时间比Django界面时间晚8h
django界面显示时间5.26号00:00,  但保存到数据库时有时差8h, 变成5.25号16:00。settings.py中设置了USE_TZ=True 和 	TIME_ZONE = 'Asia/Shanghai'。用datetime..]]></description><category></category></item><item><title><![CDATA[Solr使用]]></title><link>https://blog.youkuaiyun.com/BSSZDS930/article/details/117324044</link><guid>https://blog.youkuaiyun.com/BSSZDS930/article/details/117324044</guid><author>BSSZDS930</author><pubDate>Thu, 27 May 2021 14:23:46 +0800</pubDate><description><![CDATA[文章目录常用的查询规则Solr运算符示例：solr查询优化
常用的查询规则


q - 查询字符串，这个是必须的。如果查询所有*:*，根据指定字段查询（name:张三 AND address:北京）


fq -过虑查询，作用：在q查询符合结果中同时是fq查询符合的


fl - 指定返回那些字段内容，用逗号或空格分隔多个。


start - 返回第一条记录在完整找到结果中的偏移位置，0开始，一般分页用。


rows - 指定返回结果最多有多少条记录，配合start来实现分页。


sort - 排序.]]></description><category></category></item></channel></rss>