-
Python多线程和多进程(六) 线程池的坑和问题——内存溢出、任务共享线程池导致饥饿或死锁和拒绝策略不当阻塞
发布时间:2022-11-18 00:29前文阅读:Python多线程和多进程(五) 多线程管理——线程池 前面我们说了python多线程和线程池的优势和使用方法,并通过爬虫实例做演示。那么本
-
从IO模型到协程(七) asyncio协程+redis队列高并发批量下载文件
发布时间:2021-06-10 19:14公司内部的一个图片网站有一个支持批量下载的小需求,由于不同的图片存放在不同的oss远程服务器上,前端直接请求图片链接可能引发跨域问题,因此需要前端先请求后端接口,由后端下载资源后再输出给前端。为了图省
-
爬虫进阶之Scrapy(十) scrapy引擎核心之twisted框架
发布时间:2021-02-18 11:26Scrapy是一个内置使用了Python的Twisted框架的抓取应用。Twisted是事件驱动的,它里面的大部分方法和api都是异步非阻塞的。现在我们抛开scrapy,假设我们自己开发一个爬虫,我们
-
爬虫进阶之Scrapy(九) 使用pybloom布隆过滤器优化scrapy_redis的去重策略
发布时间:2021-02-18 10:08Python实现BloomFilter(布隆过滤器) 有关布隆过滤器的原理和用途,可以看看这篇文章: 深入Redis之 redis布隆过滤器(十一) http
-
爬虫进阶之Scrapy(八) scrapy_redis模块实现分布式爬虫及原理分析
发布时间:2021-02-10 10:49Scrapy分布式爬虫的原理很简单,它依赖于scrapy的一个组件scrapy-redis。大致为: 将scrapy代码部署到多台工作机器(简称为服务器W),将redis服务部署到另一台服务器(
-
从IO模型到协程(六) asyncio和协程实现高并发
发布时间:2020-11-17 16:35协程不是计算机提供的,而是程序员认为创造的(计算机只提供线程和进程) 协程又被称为微线程,是一种用户态内的上下文切换技术(线程和进程的调度由cpu和内核决定,而协程的调度由我们开发者在用户态程序
-
从IO模型到协程(五) python中的协程(coroutine)
发布时间:2020-11-14 13:18在观看本节之前,需要大家理解什么是生成器以及生成器是如何工作的,不了解生成器的朋友可以查看本博客有关python迭代器和生成器的文章。 一、什么是协程(Coroutine)
-
数据结构与算法python语言实现(六) 图
发布时间:2020-06-27 21:49图 Graph 图的术语: 1.顶点 Node 是图的基本组成部分,顶点具有名称标识Key,也可以携带数据项value 2.边Edge(也称“弧Arc”) 作
-
数据结构与算法python语言实现(五) 树
发布时间:2020-06-07 20:30树 树是一种非线性的数据结构,树包含根,枝,叶 树的特征: 1.树是有层次的:越接近顶层的分类越普遍,越接近底层的分类越独特 2.一个节点的子节点和另一个节点的子节点相互之间是隔离,独
-
数据结构与算法python语言实现(四) 查找和排序
发布时间:2020-06-01 23:28查找算法 1.顺序查找 说白了就是遍历查找。 例如:在 [5,1,55,67,32,10,46,100] 中找一个数,找到返回true,否则返回false def sequeS
-
数据结构与算法python语言实现(三) 递归
发布时间:2020-05-27 13:05递归就是在函数中调用自身函数 递归的精髓在于:将问题分解为规模更小的相同问题 一个简单的递归应用:数列求和 用循环解决 def listsum(numLis
-
数据结构与算法python语言实现(二) 线性结构
发布时间:2020-05-18 23:39最基本的几种线性结构为: 栈 stack 队列 Queue 双向队列
-
数据结构与算法python语言实现(一) 算法分析
发布时间:2020-05-17 23:46分析算法的好坏主要是从计算机资源消耗的角度来评判的 如果一个算法能更高效的利用计算资源,或者更少的占用计算机资源就是更好的算法。 这里说的计算机资源是指: 1.存储空间(内存空间和辅
-
Python多线程和多进程(六) 多进程编程和同步
发布时间:2020-04-11 14:48多进程编程 多进程和多线程对比: 1.由于python有GIL锁,而且是一个进程管理着1把GIL锁,所以多线程无法使用多核,即同一时刻只能一个线程在运行。 而多进程编程可以使用多核。意味着,
-
Python多线程和多进程(五) 多线程管理——线程池
发布时间:2020-04-11 14:28多线程管理 - 线程池 Q1:首先,为什么需要线程池? 因为我们希望能够保持一定数量的并发线程处于执行状态,让处于执行状态的线程数不至于太少也不至于太多,提高任务执行效率。 Q2:信号量
-
Python多线程和多进程(四) 线程同步之信号量
发布时间:2020-04-11 13:37同步方式3:信号量 semaphore 信号量是用于控制并发线程数量的锁。 还是以爬虫为例子。你可能有这么个需求:列表页爬到很多的详情页,我想对每个详情页开一个线程来爬。 但是如果1
-
Python多线程和多进程(三) 线程同步之条件变量
发布时间:2020-04-11 13:19同步方式2:条件变量 首先,条件变量必须要配合互斥锁使用,因为条件变量是一种多线程竞争的共享资源。 通过条件变量可以实现等待和通知的机制。 最基本的使用方式为: cond =
-
Python多线程和多进程(二) 线程同步之互斥锁和重入锁
发布时间:2020-04-06 23:55多线程编程 - 线程同步 什么是线程同步,为什么要线程同步 线程同步是为了解决多线程编程中,由于竞争使用资源或修改变量而造成数据不一致的问题举一个例子: # coding=utf
-
Python多线程和多进程(一) GIL锁和使用Thread创建多线程
发布时间:2020-04-06 23:40Python中的GIL锁GIL 全局解释器锁python中一个线程对应于c语言中的一个线程。GIL锁是“一个进程有且仅有一个的锁,该锁用于控制多线程同一时刻只能有一个线程使用CPU”GIL使得同一时刻
-
Python 多线程+多进程+任务队列爬取文章
发布时间:2020-03-09 00:18上一章介绍了python的多线程和多进程的简单知识,这一章通过python多进程和多线程写一个爬取投诉文章的爬虫。 爬取内容如下: 投诉详情页的多个字段 每个详情