并发
文章平均质量分 93
达西布鲁斯
8年IT一线经验,历任DevOps和DevTest岗位,熟悉Python开发。关注API自动化测试、GUI自动化测试、性能测试、DevOps、CICD等方向
展开
-
Python并发之多进程multiprocessing(2)
1, 多进程 vs 多线程Python中的常见的并发模型分为两种:多线程threading并发,多用于IO密集型计算 多进程multiprocessing并发,多用于CPU密集型计算(1)IO密集 vsCPU密集IO密集:I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时...原创 2018-10-16 21:38:05 · 2015 阅读 · 0 评论 -
Python并发之分布式进程(3)
如果任务数量实在庞大,在一台机器上进行有限的多进程工作模式也往往很难吃的消。这个时候,我们就需要把多进程分配到多台机器上通过网络互相通信进行协同工作,相比最多只能分布到多个CPU的线程,这种工作模式的效率会有非常大的提升。这种建立在网络之上的软件系统,就称为分布式系统(distributedsystem)分布式系统有两大特点:内聚性和透明性内聚性:每一个数据库节点高度自治,有本地的数...原创 2018-10-22 22:29:41 · 669 阅读 · 0 评论 -
Python并发之协程基础(4)
1, 基本概念协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程我觉得单说协程,比较抽象,如果对线程有一定了解的话,应该就比较好理解了。那么这么来理解协程比较容易: 线程是系统级别的,它们是由操作系统调度;协程是程序级别的,由程序员根据需要自己调度。我们把一个线程中的一个个函数叫做子程序,那么子程序在执行过程中可以中断去执行...原创 2019-01-22 13:52:43 · 572 阅读 · 0 评论 -
Python并发之协程gevent基础(5)
1,gevent介绍gevent是第三方库,通过greenlet实现coroutine,创建、调度的开销比线程(thread)还小,因此程序内部的执行流效率高。gevent 实现了 python 标准库中一些阻塞库的非阻塞版本,如 socket、os、select 等 (全部的可参考gevent1.0 的 monkey.py 源码),可用这些非阻塞的库替代 python 标...原创 2019-01-22 17:18:40 · 16544 阅读 · 1 评论 -
Python并发之协程gevent数据结构和实践(6)
greenlet instances 之间的关系存在两种:仅有包含于 greenlet instances 集合的关系 同步关系,即存在协作关系第一种形式很常见,不同的 greenlet instance 之间没有交流,且没有共享数据需要进行操作,各自做各自的事情。对于第二种形式,gevent 提供了几种数据结构便于 greenlet instances 间进行同步。Gevent常用...原创 2019-01-23 16:45:04 · 2736 阅读 · 0 评论 -
Python并发之协程asyncio(7)
在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块。asyncio在python3.4后被内置在python中,使得python的协程创建变得更加方便。Python 3.5添加了async和await这两个关键字,分别用来替换asyncio.coroutine和yield from。自此,协程成为新的语法,而不再是一种生成器类型了。事件循环与协程的引入,可以...原创 2019-02-21 21:54:30 · 783 阅读 · 0 评论 -
Python并发之异步aiohttp(8)
在我们写普通的爬虫程序时,经常会用到requests库用以请求网页并获得服务器响应。而在协程中,由于requests库提供的相关方法不是可等待对象(awaitable),使得无法放在await后面,因此无法使用requests库在协程程序中实现请求。官方专门提供了一个aiohttp库,用来实现异步网页请求等功能,就是异步版的requests库。1,aiohttp基本用法在官方文档中,推荐...原创 2019-02-23 20:51:04 · 2386 阅读 · 0 评论 -
Python并发之多线程threading(1)
Threading用于提供线程相关的操作。线程是应用程序中工作的最小单元,它被包含在进程之中,是进程中的实际运作单位。当不同的线程需要操作共享数据时,当两个或以上对共享内存的操作发生在并发线程中,并且至少有一个可以改变数据,又没有同步机制的条件下,就会产生竞争条件,可能会导致执行无效代码、bug、或异常行为。需要通过某些机制控制共享数据的读写,确保同一个时刻只能有一个线程能写数据。Thre...原创 2018-10-11 22:39:08 · 21869 阅读 · 0 评论 -
Python高级用法之分布式锁
1,数据一致性当多个进程/线程对同一个共享资源读写,会因为资源的争夺而出现混乱,导致数据不一致。如下图:在数据库的原始数据是 d0,上图的处理流程如下:t1 时刻,有两个数据源的数据 d1,d2 分别到达数据处理层,主进程分配线程 Merge1 处理 d1,Merge2 处理 d2,两者又同时(假设还是 t1 )从数据库获取原始数据 d0 t2 时刻,Merge1 合并完 d...原创 2019-04-20 17:57:41 · 6038 阅读 · 3 评论