Python 并发
文章平均质量分 87
Python 处理并发的相关库。
山药鱼儿
夫学须静也,才须学也,非学无以广才,非志无以成学
展开
-
python实现协程(六)
本节介绍asyncio剩余的一些常用操作:事件循环实现无限循环任务,在事件循环中执行普通函数以及协程锁。一. 无限循环任务 事件循环的run_until_complete方法运行事件循环时,当其中的全部任务完成后,会自动停止循环;若想无限运行事件循环,可使用asyncio提供的run_forever方法:import asyncioimport ti...原创 2020-03-30 08:50:46 · 3483 阅读 · 0 评论 -
python实现协程(五)
一. asyncio基本操作1.1 任务状态 上一节我们提到asyncio的任务使用协程对象作为参数创建。并且任务含有多种状态。下面我们使用一个简单的例子来说明任务的各种状态。import timeimport asyncio@asyncio.coroutinedef do_some_work(): print('Coroutine start.')...原创 2020-03-29 20:15:28 · 374 阅读 · 1 评论 -
python实现协程(四)
我们本节开始学习的python asyncio包,使用基于事件循环驱动的协程实现并发。这是python中最大,也是最具雄心壮志的库之一。既然async基于事件驱动,那么让我们首先来了解下事件驱动编程,再进入正题。一. 事件驱动 事件驱动编程是一种编程范式,程序的执行流程由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时,使用一种回调机制来触发相应的...原创 2020-03-29 10:40:00 · 378 阅读 · 0 评论 -
python实现协程(三)
一. 让协程返回值 下面的例子,我们再次改版之前计算平均值的协程函数,这一版本的协程函数每次被激活时,不会自动产出平均值,而是在最后返回一个值。(averager协程返回的结果是一个namedtuple,2个字段分别是count和average):from collections import namedtupleResult = namedtuple('Result'...原创 2020-03-28 19:01:46 · 233 阅读 · 0 评论 -
python实现协程(二)
一. 预激活协程的装饰器 调用协程函数后,返回的是一个协程对象,函数本身并不会执行。所以在调用send方法前,必须使用next()或send(None)来预激活协程函数,是协程函数执行到第一个yield表达式,处于暂停状态。为了简化操作,下面我们定义一个预激活的装饰器:from functools import wrapsdef coroutine(func): ...原创 2020-03-28 12:10:00 · 227 阅读 · 0 评论 -
python实现协程(一)
python成成器中用到的 yield item 具有2个含义“产出”和“让步”。yield item这行代码会产出一个值,提供给next()调用方;此外还会做出让步,即暂停执行生成器,让调用方继续工作,直到需要使用另一个值时,才会回到生成器上次退出的地方继续执行。 从句法上看,协程与生成器类似,都是包含yield关键字的函数。但在协程中,yield表达式通常为:...原创 2020-03-27 22:14:26 · 524 阅读 · 0 评论 -
python处理并发导读与目录
在阅读Python处理并发的系列文章前,正确区分 进程/线程、并行/并发、阻塞/非阻塞、同步/异步 概念非常重要,是学习本部分内容的基础,也是面试中经常会被问到的内容。一. 概念区分1.1 进程和线程 一个正在运行的程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。其中,线程是操作系统分配处理器时间片的最小单位。进程间是相互独立的,一个进程无法访...原创 2020-03-27 19:37:56 · 249 阅读 · 0 评论 -
Python实现多线程(三)
本文将继续我们之前Python多线程编程知识总结(二)和Python多线程编程知识总结(一)讨论的python多线程问题,详细介绍守护线程的知识,并将结合守护进程,进行对比。一. 概述 Python多线程编程知识总结(一)文章中,我们了解到可以通过设置线(进)程的deamon属性,来定义守护线(进)程。守护线(进)程会在主线(进)程退出时,立即退出,因此一个线...原创 2018-08-26 17:59:09 · 238 阅读 · 0 评论 -
Python实现多线程(二)
本片文章将继续Python多线程编程知识总结(一)讨论的主题,介绍Python多线程的其它几个概念:线程间的通信,全局解释器锁(GIL)问题以及线程,进程间的对比。一. 线程间的通信问题 *通信方法 : 多个线程共用进程空间,所以进程的全局变量对进程内的线程均可见。使用全局变量通信是线程主要通信方法。 *注意事项 : 线程间通信更容易产生资源争夺,往往需要同步互斥机制保证通信安全...原创 2018-08-25 12:22:54 · 406 阅读 · 0 评论 -
Python实现多线程(一)
一. 什么是线程线程也是一种多任务编程的方式,可以使用计算机多核资源。线程又被称为轻量级的进程,线程具有以下特征: 线程是计算机核心分配的最小单位 一个进程可以包含多个线程 线程也是一个运行过程,也要消耗计算机资源。多个线程共享其进程的资源和空间 线程也拥有自己特有的资源属性,比如指令集,TID等 线程无论创建,删除还是运行,资源消耗都小于进程 多个线程之...原创 2018-08-25 11:55:47 · 300 阅读 · 0 评论 -
python实现多进程(三)
本文继续python多任务编程思想(一)和 python多任务编程思想(二)讨论python多进程话题,展开python多进程编程中的最后一个知识点----->python进程间通信的方法。 进程间由于空间独立,资源无法互相直接获取,此时在不同的进程间进行数据传递就需要专门的通信方法。进程间通信的方法包含以下6种,本文将依次进行介绍: 管道 消息队列 ...原创 2018-08-19 22:44:40 · 439 阅读 · 0 评论 -
Python实现多进程(二)
本文继续Python多任务编程思想(一)的话题,讨论python中进程的剩余几个概念:守护进程、重写Process类创建子进程以及进程池技术。一.守护进程 主进程创建守护进程:①设置daemon属性为true;②虽然进程间是相互独立的,守护进程会在主进程"代码执行结束"时终止;③守护进程中不能再创建子进程。 守护进程与守护线程存在很大差异,在学习...原创 2018-08-19 18:18:35 · 313 阅读 · 0 评论 -
Python实现多进程(一)
1. 多任务编程: 利用计算机的多核特点,同时执行多个任务。通过充分地利用计算机资源,来提高程序的运行效率。 实现: 多进程 多线程 ①并行 && 并发 并行:多个计算机核心同时处理多个任务;多个任务之间是并行关系 并发:计算机同时处理多个任务,内核在多个任务之间不断切换,达到好像在同时处理的运行效果。此时多个...原创 2018-07-24 00:05:43 · 743 阅读 · 0 评论 -
Python实现IO多路复用
一. IO操作凡是'在内存中存在的数据交换的操作'都可以认为是IO操作 eg: 内存和磁盘的交互 读写 read write 内存和终端的交互 print input 内存和网络的交互 recv send1. 阻塞IO 默认形态,效率很低的一种IO 阻塞情况: ①因为某种条件没有达到造成的阻...原创 2018-07-22 23:43:48 · 351 阅读 · 0 评论