自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旷古的寂寞的博客

记录学到的点点滴滴以及代码片段

  • 博客(77)
  • 资源 (1)
  • 收藏
  • 关注

原创 Centos安装tesserocr实现验证码识别

centos的tesserocr的安装及python识别验证码的示例

2023-05-08 21:43:59 328

原创 Django大文件分块上传和分块下载

下面是简单的demo,可能有Bug,需要的看官拿去自己拓展吧。views.py#!/usr/bin/env python# -*- coding: utf-8 -*-import osimport reimport statimport base64import shutilimport pickleimport rehashimport mimetypesimport posixpathfrom django.conf import settingsfrom urllib

2021-07-27 15:55:22 2144

原创 全国电话区号->地址映射表

{ "010": {"customerProvince": "北京", "customerCity": "北京"}, "021": {"customerProvince": "上海", "customerCity": "上海"}, "022": {"customerProvince": "天津", "customerCity": "天津"}, "023": {"customerProvince": "重庆", "customerCity": "重庆"}, "852".

2021-07-26 16:37:29 879

原创 linux系统zip压缩解压命令笔记

1. 安装sudo apt-get install -y zip unzip2. 压缩zip -r zipfilename.zip folder_or_file_path3. 解压unzip -qo zipfilename.zip -d folder4. 参数说明-o overwrite files WITHOUT prompting 覆盖对应位置的同名文件-q quiet mode 静默解压,不输出文件列表-d extract files into exdi...

2021-07-26 16:29:23 555

原创 CentOS下给sftp创建新用户并限制默认目录

一、添加用户和用户组sudo adduser -g groupname -d userhome -s /sbin/nologin username # 添加用户,指定主目录,禁止ssh登录sudo usermod -a -G groupname username # 把用户添加到sftp的用户组sudo passwd username # 配置sftp用户密码二、修改主目录所有者及权限配置sftp的坑:1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止..

2021-07-26 16:08:58 673

原创 Centos7.4+Python2.7.5离线安装kafka-python和paramiko

kafka-python和paramiko是python分别用于连接kafka和sftp的库,公司的服务器基于安全考虑不能访问外网,所以我们需要离线安装,安装步骤如下。1. 在有网的机器上装一个与服务器系统版本一致的系统,这里我们安装Centos7.4。2. 执行以下命令配置yum源为阿里云的源,加快下包的速度。yum-config-manager --add-repo http://mirrors.aliyun.com/repo/Centos-7.repo3. 安装yum-utils,用

2021-03-24 14:12:41 1044 2

原创 python tkinter 自适配屏幕尺寸动态显示窗口滚动条,表格复选框全选功能的Demo

from tkinter import ttk, Tk, Frame, Canvas, Scrollbardef paint_frame(frame): # 绘制窗口中的内容 table = ttk.Treeview(frame, height=45, show='headings') table['columns'] = tuple([str(i + 1) for i in range(15)]) for column in table['columns']: .

2021-02-04 20:10:37 2069

原创 H5页面在手机浏览器上无法播放视频或无法切换视频源的解决方案

一、视频无法播放问题最近做了个播放MP4视频的网页,发现PC端能正常播放视频,但是部分手机浏览器,例如UC浏览器,播放视频要么一直转圈加载,要么报-9324,19000错误。查了很多资料,基本都是说video标签的参数配置不对或者浏览器版本不兼容,没啥用。最后发现问题出在网络协议上,H5做的页面在部分手机端的浏览器上只能用http或者websocket协议传输视频数据,不能用https协议。解决方案就是在video标签中使用完整的http视频链接,即使用http前缀的绝对路径。<

2021-01-28 17:26:49 9909 3

原创 JS检测用户打开和关闭浏览器操作,计算当前访客数的高兼容性方案

var send_end = false, // 控制是否发送离开信号 isOpenNewPage = true, // 控制是否发送访问信号 request_id = $('html')[0].id; // 某次请求流程的唯一标识function sendStart() { // 发送访问信号,访客数+1 if (!isOpenNewPage) {return;} // 不同的浏览器支持的监听方法不同,通过全局变量控制多次检测到也只发送一次 $.ajax({.

2020-11-11 17:55:03 145

原创 ubuntu16.04/18.04配置nodejs环境,安装npm

# 清理环境sudo apt remove --purge nodejs npmsudo apt cleansudo apt autocleansudo apt install -fsudo apt autoremove# 添加仓库,setup_10.x是版本号为10的仓库,具体版本可自行修改sudo apt install -y curlcurl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -# 安装nodejs.

2020-09-02 17:21:09 405

原创 配置nginx访问多个服务器静态文件(解决nginx的www-data用户访问sshfs挂载目录的权限问题)

最近搭了一个双节点的服务,每个节点各自有静态文件目录,nginx访问这些静态目录就成了问题。当然我们可以搭建单独的文件服务器,但是那样成本太高了,接下来说一下当前场景的解决方案。1. sshfs挂载静态文件目录下面的挂载命令可以把多个其他服务器的media目录挂载到本地:mkdir /local_path/media_1/sshfs remote_user@remote_host:/remote_path/media/ /local_path/media_1/ -o allow_other

2020-08-27 18:24:18 1619

转载 python中的进程、线程、协程,它们的区别和联系

1. 进程的定义进程是系统进行资源分配和调度的一个独立单位。import multiprocessingimport timedef sing(): for i in range(89): print('----正在唱歌-----') time.sleep(1)def dance(): for i in range(3): print('----正在跳舞-----') time.sleep(89)if __name...

2020-07-27 18:52:23 282

转载 MySQL-联合索引

一、什么是联合索引两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。二、命名规则1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用..

2020-07-23 22:12:28 676

转载 Redis的深入学习

留个脚印:https://www.cnblogs.com/kismetv/p/9137897.html

2020-07-23 22:10:05 117

转载 关于mysql的事务

1.事务简介(1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。(2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。(3)事务用来管理 insert,update,delete 语句。2.事务四大特征一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。原子性:一个

2020-07-23 22:04:00 87

转载 WSGI 协议运行原理

基本概念:WSGI:全称是Web Server Gateway Interface,WSGI是一种规范,用来描述web server如何与web application通信的规范。server和application的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和webapplication,当前运行在WSGI协议之上的web框架有Flask,Django等。WSGI协议主要包括server和application两部分:WSGI server负责...

2020-07-23 21:56:09 146

转载 with及上下文管理器的原理和应用

这篇博客主要总结with用法,自定义上下文管理器,以及__exit__的参数相关内容。with 语句是 Pyhton 提供的一种简化语法,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,with 语句主要是为了简化代码操作。with:文件使用后自动关闭# 创建一个文件test.txt,若存在则打开,写入Hello Python# 创建/打开文件f = open('test.txt', 'w')f.write("Hello Python")#

2020-07-23 21:51:46 157

转载 Python字典底层实现原理

在Python中,字典是通过散列表或说哈希表实现的。字典也被称为关联数组,还称为哈希数组等。也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值。哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改。哈希表中哈希函数的设计困难在于将数据均匀分布在哈希表中,从而尽量减少哈希碰撞和冲突。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。Python中并不包含这样高级的哈希函数,几个重要(用于处理字

2020-07-23 21:45:51 113

转载 MySQL中四种常用存储引擎的介绍

MySQL常用的四种引擎的介绍(1):MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表支持3种不同的存储格式,分别是:静态表;动态表;压缩表静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身

2020-07-23 21:43:01 115

转载 Mysql 中 MyISAM 和 InnoDB 的区别

1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大

2020-07-23 21:39:58 123

转载 线程池使用:CPU密集型和IO密集型

#1 cpu密集型: cpu使用率较高(也就是一些复杂运算,逻辑处理),所以线程数一般只需要cpu核数的线程就可以了。 这一类型的在开发中多出现的一些业务复杂计算和逻辑处理过程中。#1 I/O密集型: cpu使用率较低,程序中会存在大量I/O操作占据时间,导致线程空余时间出来,所以通常就需要开cpu核数的两倍的线程, 当线程进行I/O操作cpu空暇时启用其他线程继续使用cpu,提高cpu使用率 通过上述可以总结出:线程的最佳数量: 最佳线程数目 = ((线程等待时间+线程CPU...

2020-07-23 01:01:49 1832

原创 python实现的三层系统调用模型,模拟消息堆积的情况

前段时间我们的客户端总是Read timeout,定位以后发现是中间的消息转发系统消息堆积了。消息堆积的原因是底层系统处理部分消息的时间比较长,异步IO转发消息是并发而不是并行的,这部分处理时间长的网络IO占用了大量并发切片时间和资源,导致原本处理很快的那部分请求也被阻塞了。我们使用了线程池解决这个问题,实现并行的网络交互,避免了长时间请求阻塞其他请求,下面是系统架构模型及解决方案。一、底层服务端#!/usr/bin/env python# -*- coding:utf-8 -*-im

2020-07-23 00:52:20 110

原创 关于json,pickle,BSON的区别

json适用于跨语言的序列化、反序列化场景,但是对内部数据类型要求较严格。import jsonprint(json.loads(json.dumps({'test': 'test'})))with open('test.txt', 'w') as file: json.dump({'test': 'test'}, file)with open('test.txt', 'r') as file: print(json.load(file))pickle可用于序列化python

2020-07-22 00:51:09 179

原创 Python调度器(Scheduler)简单用例

apscheduler调度器类型:BlockingScheduler 阻塞式调度器BackgroudScheduler 非阻塞式后台调度器AsyncIOSchedulerGeventSchedulerTornadoSchedulerTwistedSchedulerQtScheduler#!usr/bin/env pythonimport timeimport loggingfrom datetime import datetimefrom apscheduler.s

2020-07-22 00:25:52 2431

原创 Python连接MQTT的示例

MQTT服务的安装配置:https://cloud.tencent.com/developer/article/1350337#!usr/bin/env pythonimport timefrom paho.mqtt.client import Clientclass Client(Client): print_log = True # 控制是否输出MQTT交互日志 def on_message(self, client, userdata, message): .

2020-07-21 23:50:28 724

原创 Python ftplib模块解决socket交互阻塞问题

ftplib模块操作FTP服务器时很容易阻塞,原因各种各样,有时还与ftp服务器有关。下面的demo重载了ftplib模块,主要是使用了非阻塞的socket(self.sock.setblocking(0)),以及使用conn.recv接收数据代替conn.makefile生成文件句柄接收数据,解决了阻塞问题,同时增加了一些功能。#!usr/bin/env pythonimport osimport reimport timeimport socketimport ftplibimpo

2020-07-20 19:16:47 1255

转载 并发和并行的区别

并发(concurrency)和并行(parallellism)是:解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。解释三:并行是在多台处理器上同时处理多个任务。如 hadoop 分布式集群,并发是在一台处理器上“同时”处理多个任务。所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执.

2020-07-20 17:59:05 146

原创 Python生成指定长度和字符类型的随机密码并校验安全性

#!/usr/bin/env python# -*- coding:utf-8 -*-import reimport timeimport stringimport randomdef new_password(min_pass_len, max_pass_len, min_char_kind): pass_choice = [string.ascii_lowercase, string.ascii_uppercase, string.digits, .

2020-07-19 22:05:59 451

原创 python推送数据到kafka的kerberos服务验证(ubuntu)

1. 安装必要的依赖包apt-get install krb5-kdc libkrb5-dev python3-six -y --fix-missingpip3 install gssapi==1.6.6 kafka-python==2.0.1 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com2. 获取必要的配置文件krb5.conf、kafka.keytab、jaas.conf放到/etc目录

2020-07-07 18:19:42 913

原创 ubuntu使用双模机械师K7机械键盘遇到的问题

最近买了个机械师K7的双模机械键盘,可以使用数据线连接,也可以使用蓝牙连接,但因为我平时使用ubuntu开发,键盘与系统的适配方面遇到了点问题,记录下解决方法来方便其他人参考。问题1:有线连接模式,F1到F12键只能使用多媒体功能,就算按了FN组合键也无法使用正常的刷新网页等功能。执行下面的命令,F1到F12的功能就是原始功能了,按FN组合键可以使用多媒体功能。echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmodeecho opti

2020-06-08 02:02:10 3131 5

原创 deepin.com.wechat群聊@人列表不显示,启动器(聊天窗口)图标异常,窗体或输入框中文变方块,QQ同理

启动器图标异常在默认情况下,Linux系统是根据可执行文件的名称判定是属于哪个desktop文件配置的,大部分desktop文件的Exec配置的可执行文件刚好就是实际执行的文件名,所以很多没有StartupWMClass配置项。但是这个配置项很重要,比如说在上面的微信的配置里面这个值是WeChat.exe,但是为什么还是不行呢?可以通过xprop WM_CLASS获取窗口的属性值,在命令行下执行这个命令,鼠标会变成+,然后点击QQ或微信的窗口::~$ xprop WM_CLASSWM_CLA

2020-06-04 10:10:36 451

原创 django+vue的csrf_token传递

django向vue前端传递csrf_token,可以使用接口传递from django.middleware.csrf import get_tokendef get_csrf_token(request): return JsonResponse({'csrf_token': get_token(request) or 'NOTPROVIDED'})也可以使用装饰器装饰视图函数,这样csrf_token会被添加到cookie里面,这种方式要注意Domain的配置from

2020-05-31 16:32:30 1555

原创 Python rsa加密解密/签名验签,aes加密解密

#!/usr/bin/env python# -*- coding:utf-8 -*-import base64from Crypto import Randomfrom Crypto.Hash import MD5 # or use SHAfrom Crypto.Cipher import AESfrom Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5from Crypto.Signature import.

2020-05-31 16:25:36 331

原创 自定义nginx的banner信息(Server响应头)及下载统计配置

为了保证服务器安全,需要对网络攻击者隐藏服务器的相关信息,比如对方知道我们使用的是nginx/1.14.0,那么就可以有针对性的寻找对应版本的漏洞攻击我们。nginx本身提供了隐藏版本号的功能,只要在配置文件中添加这样一行,nginx的响应头中就会显示为"Server: nginx"。server_tokens off;但这样还是难免暴露了我们的服务器是nginx,为了彻底隐藏服务器...

2020-04-29 21:52:47 1620

原创 Django中自定义限制访问频率的反爬虫中间件

一、安装用到的Python库pip install geoip2 redis django-redis二、下载IP地理位置数据库,保存到项目根目录下链接: https://pan.baidu.com/s/1TaSQcgw4OimBrDH0ERLKKw 提取码: ixa7三、自定义中间件,保存到项目根目录下的backends.py中from random import...

2020-01-19 15:35:11 680

原创 sqlalchemy动态定义表模型,以及带来的内存泄露问题的解决

一、表模型动态定义方法最近遇到一个需求场景,需要在mysql中动态生成存储日志数据的表。我使用的数据库ORM是sqlalchemy,经过查阅文档,找到了如下的实现方法,需要的朋友可以拿去用了,注意查看注释哦。#!/usr/bin/env python2# -*- coding:utf-8 -*-from sqlalchemy import Column, BigInteger, Da...

2020-01-16 18:43:06 1399

原创 用gunicorn实现Django高并发的解决方案

Django提供了自带的runserver命令启动服务,这种方式一般用于开发环境以便于调试程序,并发量比较小的时候也是可以应对的,但是并发量超过这种方式的承载能力时,就需要使用gunicorn启动Django的服务来提高并发能力了。一、安装依赖包:pip3 install django==2.0.6 gevent==1.4.0 gunicorn==19.7.1二、在项目的settin...

2019-12-26 12:26:38 2554

原创 Mysql占用磁盘空间分析

最近服务器的磁盘占用率达到报警阀值了,排查后发现是Mysql占了很多空间,参考下面的文章进行了磁盘空间分析,这里备忘一下。使用df和du命令查看文件系统中目录占用磁盘空间的大小:https://www.cnblogs.com/zhuiluoyu/p/6598928.htmlMysql查看表容量大小:https://blog.csdn.net/fdipzone/article/details...

2019-12-26 09:42:34 698

原创 tornado使用持久连接,保持一定的连接数,实现端口复用的方法

一、应用场景和实现方法最近遇到一个与对端交互的特殊场景,对端限制了单个IP的端口连接数量。如果我频繁的打开和关闭TCP连接,只保证连接的数量小于限定值,对我来说,TCP连接已经关闭,端口也回收了,但是对方的端口还是识别为被占用的状态,这就导致大量的连接被拒绝。所以我查阅相关资料,实现了持久化连接、端口复用的功能,下面是一个基于Python2.7,用tornado 4.5.3框架写的...

2019-12-25 19:23:21 2314

原创 Django的ORM中使用CASE-THEN-ELSE子句批量过滤更新数据的方法

最近有一个新的需求场景,需要根据不同的过滤条件修改数据为相应的内容,比如id=n时修改name='name_n'。大量的这种操作肯定需要批量处理,否则一条一条修改效率是很低的。Mysql中可以使用CASE-THEN-ELSE子句实现这样的效果,Django的ORM也提供了相应的方法,如下所示:参考官方文档:https://docs.djangoproject.com/en/2.2/ref/mo...

2019-12-17 11:33:06 1245

裁减后的中文字体文件

裁减后的中文字体文件,解压后放到项目根目录。裁减后的中文字体文件,解压后放到项目根目录。裁减后的中文字体文件,解压后放到项目根目录。

2019-11-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除