欢迎来到皮皮网网首页

【直销系统源码功能】【如何学习读源码】【flink策略源码大全】python deque源码

来源:rpx源码 时间:2024-11-24 17:38:43

1.Python 爬虫进阶篇——diskcahce缓存(二)
2.Python中的双端队列deque

python deque源码

Python 爬虫进阶篇——diskcahce缓存(二)

       上一篇文章为大家介绍了diskcache的基础用法,本文将继续深入探讨diskcache的更多高级功能。

       关于diskcache,它是一种基于SQLite数据库的缓存对象管理方式。SQLite是一个轻量级的基于磁盘的数据库,它不需要单独的直销系统源码功能服务器进程,并支持SQL查询。在上篇文章的源码截图上,你可以看到一些SQL语句的使用。

       diskcache支持使用diskcache.FanoutCache自动分片基础数据库。分片是对数据进行水平分区,可以减少写入时的如何学习读源码阻塞。尽管读和写不会互相阻碍,但写入会阻碍其他写入。分片的默认值为8。

       以下是一个示例代码:

       # 示例代码

       在示例中,我们在diskcache_2文件夹中创建了一个具有四个分片和一秒超时的缓存。如果操作耗时超过一秒,它们将尝试中止操作。

       那么每一个分片的大小是多少呢?分片的大小都是平均分配的,占总空间的四分之一。diskcache的默认大小为1GB。

       diskcache提供了一个collections.deque兼容的flink策略源码大全双端队列diskcache.Deque。双端队列是堆栈和队列的一般化,可以在前后都可以进行快速访问和编辑,且可持久化,操作比较便捷。

       以下是一个示例代码:

       # 示例代码

       运行结果如下:

       Popleft 获取队列最前面的一个元素,pop获取末尾的一个元素;

       Appendleft 在队列最开始添加一个元素,append 在末尾添加一个元素;

       Extendleft 在队列最开始添加一个数组,extend在末尾添加一个数组;

       那么deque的存储位置在哪里?可以使用以下命令查看队列的存储位置:

       包括cache也是一个可以使用directory属性查看默认存储的位置;

       那么如何指定directory呢?Deque的第二个参数指定存储位置,第一个参数为队列的初始值。或者可以直接指定参数名称,如下:

       Index 类似于dict(字典),跟踪量化指标源码可持久化,使用也比较便捷。以下是一个示例:

       # 示例代码

       popitem表示获取最后一个键对值,并且删除,结果如下:

       peekitem() 可传递last 参数是否获取最后一个,不会删除原始值;

       setdefault(key,default) 可以给指定的key值设置默认值,在查找时可以预先设置一个默认值,防止key值不存在而抛出异常。

       keys()与values()可以查找所有Index中的key值与value值,然而没有提供判断key值是否存在的方法,但是大数据面板源码可以使用setdefault的方法自行封装。

       Lock还记得上篇文章中提到的Lock锁吗?先看一下源码:

       可以看到这里的锁用的就是cache的add方法的特性,源码中也给出了使用的方式:

       从源码上看有一个while 死循环,直到add成功时才会被释放,这里处理的方式不是很好,可能会造成死锁,所以一般情况下,都会添加一个过期的时间,如下:

       RLock还有一种RLock锁,与Lock锁的区别是RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。以下是一个示例:

       结果是执行成功。

       看一下源码:

       从源码中可以看出,判断锁的条件是os.getpid()(进程pid)与threading.get_ident()(线程标识符),如果每次acquire时的pid与ident都相同的时,即可成功。那么就可以在相同的进程中无限次数的acquire,但是多少次acquire就得多少次的release,防止死锁。

       那么是使用Lock还是RLock呢?这个要具体的看实际情况,并不是谁就一定好。

       总结本次推文中介绍了diskcache中FanoutCache缓存分片、双端队列deque、Index、Lock以及RLock。

       大家可以在实际中灵活运用,diskcache缓存的优势还是很大的,无需安装其他的模块,并且在文件管理器中能直接查看,还可以利用缓存的一些特性使用多线程的去实现业务等。

       但是也是有缺点的,即受制于本地文件系统的限制。每个磁盘每个目录下的文件数量是有限制的,所以需要结合实际情况使用。

Python中的双端队列deque

       Python中deque(双端队列)的实现基于collections模块,提供更高效的两端操作相较于列表。deque操作复杂度为O(1),显著优于列表的O(n)。

       了解不同类型的deque操作,以增强编程效率:

       1. 快速插入操作

       - append():将元素插入右侧。

       - appendleft():将元素插入左侧。

       2. 有效删除操作

       - pop():从右侧删除元素。

       - popleft():从左侧删除元素。

       3. 访问元素

       - index(ele,start,end):返回指定值的第一个索引。

       - insert(i,a):将元素插入指定索引。

       - remove():移除首次出现的元素。

       - count():计数指定值出现次数。

       4. 获取deque大小

       - len(dequeue):返回deque长度。

       5. 访问前端和后端

       - deque[0]:访问前端元素。

       - deque[-1]:访问后端元素。

       6. 扩展deque内容

       - extend(iterable):将多个值添加至右侧。

       - extendleft(iterable):将多个值添加至左侧,顺序反转。

       - reverse():反转deque元素顺序。

       - rotate():按指定数字旋转deque,正数向右旋转,负数向左旋转。

       最后,deque的复杂度分析显示其操作效率,特别是对于需要频繁进行两端操作的场景,deque提供了显著的性能优势。