
python
文章平均质量分 88
python全栈,爬虫等
Generalzy
这个人很懒,什么都没写!
展开
-
python代码加密执行(如何保护你的Python源码)
在软件开发中,代码安全是一个重要的课题。Python 代码由于以源码形式直接部署到服务器并通过解释器执行,容易暴露其中的敏感信息,如 API 密钥、加密盐等。为了解决这一问题,开发者需要采取有效的措施对代码进行加密或保护。本文将详细探讨几种常见的方案,包括编译为可执行文件、生成字节码文件、代码混淆以及基于动态解密的自定义解释器等。这些方法各有特点,可根据实际需求选择适合的方案。第一种方法是编译为可执行文件。原创 2024-11-16 20:48:15 · 1791 阅读 · 0 评论 -
分布式锁及其三种实现
(1)SETNXSETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。(2)expireexpire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。(3)deletedelete key:删除key在使用Redis实现分布式锁的时候,主要就会使用到这三个命令。原创 2023-04-03 17:03:00 · 343 阅读 · 0 评论 -
互斥锁-自旋锁-可重入锁-读写锁-悲观锁-乐观锁-分布式锁
Go语言的发明者认为,如果当你的代码需要重入锁时,那就说明你的代码有问题了,我们正常写代码时,从入口函数开始,执行的层次都是一层层往下的,如果有一个锁需要共享给几个函数,那么就在调用这几个函数的上面,直接加上互斥锁就好了,不需要在每一个函数里面都添加锁,再去释放锁。2、不具备可重入的特性,因为同一个线程在释放锁之前,行数据一直存在,无法再次成功插入数据,所以,需要在表中新增一列,用于记录当前获取到锁的机器和线程信息,在再次获取锁的时候,先查询表中机器和线程信息是否和当前机器和线程相同,若相同则直接获取锁;原创 2021-12-03 16:05:36 · 493 阅读 · 0 评论 -
http框架(django,flask,gin)流式导出文件操作
当你在 HTTP 响应中以流的方式写入内容时,如果你设置了 Transfer-Encoding: chunked,那么即使你写入了 1GB 的数据,HTTP 响应也只会有一个,但是它的 body 会被分割成多个块逐个发送。请注意,如果你手动设置了 Content-Length 头,但实际发送的数据大小与这个头部声明的大小不一致,那么可能会导致客户端出现错误,因为客户端会期待接收到声明的字节数。在实践中,如果你知道响应体的大小,并且希望客户端能够显示下载进度,你应该设置 Content-Length 头。原创 2022-07-14 23:13:39 · 1721 阅读 · 0 评论 -
还在为临时构造测试数据苦恼吗——快来看看faker库吧
Faker库主要用来创建非真实数据,使用Faker包,无需再手动生成或者手写随机数来生成数据,只需要调用Faker提供的方法,即可完成数据的生成。原创 2024-07-05 21:48:55 · 457 阅读 · 0 评论 -
23种计模式之Python/Go实现
设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法。由于高级语言的出现,让机器读懂你的意图已经不是最主要的“矛盾”,而让人读懂你的意图才是最重要。按照设计模式编写的代码,其可读性也会大大提升,利于团队项目的继承和扩展。设计模式可以分为三个大类:创建类设计模式、结构类设计模式、行为类设计模式下面用一个图片来整体描述一下设计模式之间的关系:单例模式、工厂模式(简单工原创 2024-02-13 20:16:50 · 2436 阅读 · 2 评论 -
typing python 类型标注学习笔记
typing模块为Python带来了类型提示和类型检查的能力。它允许开发者在代码中添加类型注解,提高代码的可读性和可维护性。尽管Python是一种动态类型语言,但类型注解能让开发者更清晰地了解函数和变量的预期类型。备注:Python 运行时不强制要求函数与变量类型标注。它们可被 类型检查器、IDE、语法检查器等第三方工具使用。Type hints 即类型提示,是 Python 在 3.5 版本中加入的语法,并在 Python 3.6 基本可用。原创 2024-01-20 22:07:17 · 2524 阅读 · 0 评论 -
faster python之ctypes调用so/dll
ctypes提供cast()方法将一个ctypes实例转换为指向另一个ctypes数据类型的指针,cast()接受两个参数,一个是ctypes对象,它是或可以转换成某种类型的指针,另一个是ctypes指针类型。Go编译器支持将Go代码编译成可执行文件,静态库(.a文件)和共享对象文件(.so文件或.dll文件),这使得Go可以用于构建独立的应用程序,也可以用于构建共享库,供其他程序使用。是一个动态的Python库,所以在性能要求严格的情况下,可能需要考虑使用更高级的工具,如Cython或SWIG。原创 2023-10-14 13:54:39 · 1019 阅读 · 0 评论 -
python项目2to3方案预研
总的来说,2to3是一个很有用的工具,可以帮助自动化大部分的Python 2到Python 3的迁移工作,但需要谨慎使用,同时在转换后进行仔细的代码审查以确保正确性。是一个非常实用的库,可以帮助你在 Python 2 中逐步采用 Python 3 的特性,从而为将来迁移到 Python 3 打下基础。是Python官方提供的用于将Python 2代码转换为Python 3代码的工具。不要添加将来的模块。库提供的一个命令行工具,可以帮助你批量地将 Python 2 代码转换为兼容 Python 3 的代码。原创 2023-09-20 22:15:39 · 1260 阅读 · 0 评论 -
faster python——dataclass&cache
数据类(data class)已经预先实现了基本功能。'Q'True将其与普通类进行比较。尽管要编写的代码不多,但您已经可以看到样板痛苦的迹象:为了初始化对象,等级(rank)和花色(suit)都被重复了三次。'Q'False看起来数据类在幕后帮助我们。默认情况下,数据类实现了方法以提供漂亮的字符串表示,以及一个.__eq__()方法,可以进行基本的对象比较。为了使return (f'!r!原创 2023-09-06 22:01:25 · 563 阅读 · 0 评论 -
python调用openai API
官方文档总结的十分详细,每一个功能点都给足了示例,具体参考内容还贴到了github,不存在不会使用的情况。原创 2023-07-16 15:20:34 · 3172 阅读 · 0 评论 -
go操作redis之go-redis,python操作redis之redis
在setnx的时候,还设置了过期时间,过期时间的设置是为了防止死锁的产生,设置过期时间还需要注意的一点就是需要保证setnx+expire是原子操作。也同样会导致死锁的产生。被误删的一个前提是锁的有效期到了,锁被自动释放了。事务则是实现在服务器端的行为,用户执行MULTI命令时,服务器会将对应这个用户的客户端对象设置为一个特殊的状态,在这个状态下后续用户执行的查询命令不会被真的执行,而是被服务器缓存起来,直到用户执行EXEC命令为止,服务器会将这个用户对应的客户端对象中缓存的命令按照提交的顺序依次执行。原创 2022-05-17 23:20:22 · 6038 阅读 · 2 评论 -
替换pip freeze导出项目依赖的解决方案
该命令将分析代码文件,并生成一个requirements.txt文件,其中包含当前项目所需的库清单。是一个第三方工具,可以根据代码文件生成当前项目所需的库清单。命令会将python环境下所有的安装包都导入。文件,对于项目来说,会多出很多无用的包。原创 2023-04-24 17:16:10 · 1095 阅读 · 0 评论 -
uwsgi配置文件详解
设置harakiri超时时间,一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)。指定uwsgi的客户端将要连接的socket的路径(使用UNIX socket的情况)或者地址(使用网络地址的情况)。当这个队列慢的时候,新来的请求就会被拒绝。这个命令会允许uWSGI服务器接收最大为32k的uwsgi包,再大的包就会被拒绝。当一个工作进程的虚拟内存占用超过了限制的大小,那么该进程就会被回收重用(重启)。原创 2023-04-23 22:00:33 · 4477 阅读 · 0 评论 -
CGI, FastCGI, WSGI, uWSGI, uwsgi的区别
【代码】CGI, FastCGI, WSGI, uWSGI, uwsgi的区别。原创 2021-11-14 10:24:24 · 299 阅读 · 0 评论 -
python操作excel(openpyxl,xlrd&xlwt)
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。幸运的是,有两种模式可以使你在(几乎)恒定的内存消耗下读写无限量的数据。导出大数据,但内存又不够用的时候,可以给openpyxl加上只读或只写属性,并且安装lxml库(因为excel解压后也是xml格式的文件),按照官方文档的说法可以增加一些读写速度,但对于。常使用1900为基准。原创 2023-03-23 22:35:01 · 1654 阅读 · 0 评论 -
pycharm Failed to download sqlite-jdbc-3.39.2.0.jar 解决方案
并放到C:\Users\用户\AppData\Roaming\JetBrains\PyCharm2021.1\jdbc-drivers下。记录所需要的版本号,如:sqlite-jdbc-3.39.2.jar,点击下载【点击配置文件driver里的sqlite进入环境文件配置。打开sqlite驱动配置项。新增一个驱动位置就行。原创 2023-01-24 22:24:55 · 1420 阅读 · 0 评论 -
pyjwt和djangorestframework-simplejwt双token
username = serializers.CharField(required=True, label="用户名")password = serializers.CharField(required=True, label="密码")if user:else:raise ValidationError("用户名或密码错误")# 登录签发token})else:"code": 1,})原创 2023-01-20 17:17:51 · 1085 阅读 · 0 评论 -
python常用模块——subprocess,shutil,selectors模块
epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也使用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。每次注册新的事件到epoll句柄中时(在epoll_ctl中指定 EPOLL_CTL_ADD),会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝。原创 2023-01-16 10:14:58 · 782 阅读 · 0 评论 -
go与python的深浅copy对比
如果是值类型,就会产生深拷贝如果是引用类型,就会产生浅拷贝深拷贝:光拷贝值,地址不相关。拷贝结束两变量互不影响。浅拷贝:拷贝地址。两变量指向同一地址。拷贝结束也相关,改变一个,另一个也跟着变。原创 2023-01-15 19:25:13 · 779 阅读 · 0 评论 -
python3.8,3.9,3.10,3.11特性比较
最近计划将python2迁移到python3,由于本人学习时用的3.7版本,所以仅作大于3.7版本的比较。原创 2022-12-24 12:04:41 · 28323 阅读 · 0 评论 -
python常用进制转换
用于表示整数的字节顺序。如果字节顺序为“大端”,最高有效字节在最前面。如果字节顺序为“小端”,最低有效字节在最前面。要请求主机系统的本机字节顺序,请使用“sys.byteorder”作为字节顺序值。bytes 相比 str 而言更接近底层数据,也更接近存储的形式,它其实是一个字节的数组,类似于 C 语言中的 char [],每个字节是一个范围在 0-255 的数字。length:要使用的字节对象的长度。如果整数不能用给定的字节数表示,则会引发OverflowError。二进制的十六进制字符串表示。原创 2022-11-23 20:56:01 · 3947 阅读 · 0 评论 -
python global,nonlocal和闭包以及标记弃用
总的来说,yield 用于在生成器中产生值,而 yield from 用于在一个生成器中产生来自另一个生成器的值,并且可以用于更复杂的控制流程,如协程和委派生成器。协程和委派生成器:在异步编程中,yield from 可以用于委派生成器,这是实现协程的一种方式。在 Python 中,yield 和 yield from 是与生成器相关的两个关键字,它们在协程和迭代器的上下文中有不同的用途。简化生成器的嵌套:当一个生成器需要产生另一个生成器的值时,yield from 可以替代内部的 for 循环。原创 2022-11-05 13:36:58 · 116 阅读 · 0 评论 -
进程线程深入理解GIL&一些小实验
管理器是独立运行的子进程,其中存在真实的对象,并以服务器的形式运行,其他进程通过使用代理访问共享对象,这些代理作为客户端运行。fork:除了必要的启动资源外,其他变量,包,数据等都继承自父进程,并且是copy-on-write的,也就是共享了父进程的一些内存页,因此启动较快,但是由于大部分都用的父进程数据,所以是不安全的进程。spawn:从头构建一个子进程,父进程的数据等拷贝到子进程空间内,拥有自己的Python解释器,所以需要重新加载一遍父进程的包,因此启动较慢,由于数据都是自己的,安全性较高。原创 2022-09-10 23:10:40 · 478 阅读 · 0 评论 -
python操作PDF中各类文本内容的方法
PDF格式有几种专门的变体 - 标准化和开发中。这些是PDF格式的子集。每个文件都是有效的PDF文档,但对所使用的设施或内容本身有限制。其中两个,PDF/A和PDF/X,现在是ISO标准。典型的PDF文件包含数千个对象,多种压缩机制,不同的字体格式, 以及矢量和光栅图形的混合以及各种元数据和辅助内容。PDF完全向后兼容(你可以将PDF版本1.0文档加载到为PDF 1.7设计的程序中) 并且大部分向前兼容(为PDF 1.0编写的程序通常可以加载PDF 1.7文件)。原创 2022-08-18 23:57:48 · 1341 阅读 · 0 评论 -
url编码之urldecode,urlencode/python自带的http服务/cookie,session,token
Cookie是key-value结构,类似于一个python中的字典。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie,不能跨域)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!原创 2022-08-13 15:59:11 · 6140 阅读 · 0 评论 -
python操作word——python-docx和python-docx-template模块
前言:项目用到了导出文档,综合考虑使用模块文档Document 段落Paragraph 文字块Run就是docx文档就是寻常段落如下,短句子中有多种不同的样式,则会被划分成多个文字块。如果所示,这个paragraph一共四个run。Document - Table - Row/Column - Cell四级结构读操作获取段落三个部分:一个doc由多个paragraph组成获取段落文本内容获取文字块文本内容一个paragraph段落由一个或者多个run文字块组成遍历表格表格设置字体原创 2022-07-21 22:41:17 · 18195 阅读 · 2 评论 -
go time,python time,datetime事件模块详解
GMT在历史上曾经是全球通用的标准时间,但后来由于地球自转速率的微小变化以及时间测量技术的进步,国际原子时(International Atomic Time,TAI)和协调世界时(Coordinated Universal Time,UTC)被引入作为更精确的时间标准。UTC是由原子钟提供的高度精确的时间测量,它基于国际原子时(International Atomic Time,TAI),而TAI则是由多个原子钟的平均值计算得出的。中国标准时间是以中国的首都北京为基准的标准时间,其时区代码为UTC+8。原创 2022-06-20 23:56:45 · 558 阅读 · 0 评论 -
python xml和lxml库
在XML中,不同的应用程序或组织可能使用相同的元素名或属性名来表示不同的数据,这样会导致数据混淆和解析困难。遵循XML的命名规则是非常重要的,因为命名在XML文档中用于标识数据元素和属性,如果不遵循规则,可能导致解析和处理XML文档时出现问题。XML树结构是指XML文档的组织方式,它由一系列嵌套的元素(节点)构成,形成了一个层次化的树形结构。使用XML命名空间允许在XML文档中使用相同的元素或属性名称,但在不同的命名空间中定义它们,从而避免命名冲突,并确保XML文档的解析正确性。原创 2022-06-14 16:42:25 · 2548 阅读 · 0 评论 -
命令行参数:go(flag+cobra)&python(argpase模块)
返回的是该类型的指针。flag.Type(flag名, 默认值, 帮助信息)*Typename := flag.String("name", "张三", "姓名")age := flag.Int("age", 18, "年龄")married := flag.Bool("married", false, "婚否")delay := flag.Duration("d", 0, "时间间隔")原创 2022-06-10 21:37:04 · 593 阅读 · 0 评论 -
python定时任务调度(cron)——APS
每个jobstore都会绑定一个alias,scheduler在Add Job时,根据指定的jobstore在scheduler中找到相应的jobstore,并将job添加到jobstore中。Executor的种类会根据不同的调度来选择,如果选择AsyncIO作为调度的库,那么选择AsyncIOExecutor,如果选择tornado作为调度的库,选择TornadoExecutor,如果选择启动进程作为调度,选择ThreadPoolExecutor或者ProcessPoolExecutor都可以。原创 2022-06-09 23:39:01 · 4570 阅读 · 3 评论 -
python常用模块——re,file,zip,json,strings,virtualenv,asyncio,gevent
按照行('\r', '\r\n', '\n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1。如果beg 和 end 指定值,则在指定范围内检查.在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。原创 2022-06-06 22:09:42 · 184 阅读 · 0 评论 -
Linux进程管理工具——supervisor
Supervisor (http://supervisord.org) 是一个用 [Python] 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。原创 2022-03-20 15:36:53 · 2589 阅读 · 0 评论 -
RPC & gRPC python
gRPC可以方便地支持流式通信(理论上通过http2.0就可以使用streaming模式, 但是通常web服务的restful api似乎很少这么用,通常的流式数据应用如视频流,一般都会使用专门的协议如HLS,RTMP等,这些就不是我们通常web服务了,而是有专门的服务器应用。然后等待下一个调用。RPC协议构建于TCP或UDP,或者是HTTP上,允许开发者直接调用另一台服务器上的程序,而开发者无需另外的为这个调用过程编写网络通信相关代码,使得开发网络分布式程序在内的应用程序更加容易。原创 2022-03-15 09:38:25 · 298 阅读 · 0 评论 -
python自动化[poco篇]
PocoPoco是一款跨平台的自动化测试框架,基于UI控件搜索原理,与基于图像识别的Airtest不同的是,Poco可以使用类似 poco(“OK”).click() 的方式来获取并操作节点。Poco能帮助我们获取控件的属性信息、操作控件、设置控件的text属性等等,但是连接设备、断言等操作,还需要依赖于Airtest的API,所以我们大多数情况下,都需要混合使用Airtest和Poco框架来编写我们的自动化脚本。安装pip install pocoui三种定位选择器基本选择器(推荐)在poc原创 2022-03-04 09:33:18 · 7005 阅读 · 0 评论 -
python自动化 adb命令
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。原创 2022-03-03 15:36:37 · 3769 阅读 · 0 评论 -
python自动化[android篇]
22 “KEYCODE_DPAD_RIGHT” 向右。20 “KEYCODE_DPAD_DOWN” 向下。21 “KEYCODE_DPAD_LEFT” 向左。拖拽事件自动生成代码,提供基本事件,较为简单。19 “KEYCODE_DPAD_UP” 向上。adb shell monkey [参数]原创 2022-03-01 14:42:50 · 3943 阅读 · 0 评论 -
pillow模块和开箱即用的python生成验证码
GIF 图片非常适合在互联网中使用,这是因为它采用了图像预压缩技术,该技术的应用,在一定程度上减少了图像传播、加载所消耗的时间。PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字,比如 TrueType 和 OpenType 类型的字体。Image是Pillow中最为重要的类,实现了Pillow中大部分的功能。原创 2022-02-01 17:19:15 · 2501 阅读 · 0 评论 -
python并发编程回顾
精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。原创 2022-01-08 15:11:28 · 106 阅读 · 0 评论 -
python网络编程回顾
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。原创 2022-01-08 09:54:13 · 411 阅读 · 0 评论