python学习之j进程和线程:
每个进程至少有一个线程,python因为每个线程都共用一个GIL全局锁(同时只能运行一个线程),所以不能用多线程(除非重新写C解释器),但是多进程的GIL锁各自独立可多进程。
进程与线程的区别在于一个变量在多线程中都可改变相互影响可通过互斥锁来解决。而多进程相当于各有一个拷贝互不影响。
多进程比较消耗系统资源,但稳定性高。
多线程:速度快,但稳定性不高
计算密集型和IO密集型任务:
计算密集型,任务越多效率越低,适合效率高的C语言
IO密集型:因为任务与MCU存在速度上的巨大差异,单任务的等待会消耗大量的无效MCU时间。如果任务越多并发执行,效率越高,适合开发效率较高的python语言。但为了避免死等可以用异步的’协程‘提高对异步事件驱动型的响应
分布式进程:Python 的 multiprocessing 模块不但支持多进程,其中 managers 子模块还支持把多进程分布到多台机器上 ,注意,当我们在一台机器上写多进程程序时,创建的 Queue 可以直接
拿来用,但是,在分布式多进程环境下,添加任务到 Queue 不可以直接对原始的 task_queue 进行操作,那样就绕过了 QueueManager 的封装,必须通过 manager.get_task_queue()获得的 Queue 接口添加
一 相关模块:threading, multiprocessing
1.1 创造线程t1 = threading.Thread(target=run_thread, args=(5,))
执行线程:t1.start()
等待线程结束:t1.join()若不能结束则需强制结束.terminate(), 属性threading.current_thread().name
二互斥锁:lock = threading.Lock(),申请:lock.acquire();释放:lock.release()
三 多线程共享数据:互斥信号量ThreadLocal,
3.1 定义 local_school = threading.local()
3.2 使用:在各模块中修改local_school.object
四:协程:协程相当于加了中断功能的子程序,子程序有一个入口一个出口,出来了才能干其它事情,而协程是利用genarator生成器(generator 中,我们不但可以通过 for 循环来迭代,还可以不断调用
next()函数获取由 yield 语句返回的下一个值
),而在协程里yeil不但可以返回一个值,它还可以接收调用者发出的参数
,在生产消费者类型里面,生产者通过一个一个生成器传参数r = c.send(n) ,而消费者通过n =yeid r或的参数,并修改r参数,然后又回到生产者中调用r.
4.1异步IO协程(并发完成):asyncio (Python 3.4)提供了完善的单线程异步 IO 并发操作支持,在客户端的意义不大但在服务器中则非常好用,asyncio 实现了 TCP、 UDP、 SSL 等协议, aiohttp(须安装) 则是基于 asyncio 实
现的 HTTP 框架
;异步操作需要在 coroutine 中通过 yield from 完成;多个 coroutine 可以封装成一组 Task 然后并发执行;为了简化并更好地标识异步 IO,从 Python 3.5 开始引入了新的语法 async
和 await,可以让 coroutine 的代码更简洁易读
,只是些语法替换。
import asyncio
@asyncio.coroutine
#用async 替代在def前
def func(host):
yied from #用await替代。
loop = asyncio.get_event_loop()
tasks = [wget(host) for host in ['www.sina.com.cn', 'www.sohu.com',
'www.163.com']]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
python学习之j进程和线程:的更多相关文章
- python 学习笔记八 进程和线程 (进阶篇)
什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执 ...
- Python学习之GIL&进程池/线程池
8.6 GIL锁** Global interpreter Lock 全局解释器锁 实际就是一把解释器级的互斥锁 In CPython, the global interpreter lock, or ...
- Python学习之路--进程,线程,协程
进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Q ...
- Python学习笔记 - day13 - 进程与线程
概述 我们都知道windows是支持多任务的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多 ...
- Python全栈【进程、线程】
Python全栈[进程.线程] 本节内容: 进程 线程 协程 I/O多路复用 进程 1.进程就是一个程序在一个数据集上的一次动态执行过程,进程是资源分配的最小单元. 2.进程一般由程序.数据集.进程控 ...
- python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...
- Python Web学习笔记之进程与线程
要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空 ...
- Python之路,Day9, 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- python中socket、进程、线程、协程、池的创建方式和应用场景
进程 场景 利用多核.高计算型的程序.启动数量有限 进程是计算机中最小的资源分配单位 进程和线程是包含关系 每个进程中都至少有一条线程 可以利用多核,数据隔离 创建 销毁 切换 时间开销都比较大 随着 ...
随机推荐
- webform中实现SQL Sever2008数据库数据分页查询
1 分页 1.1 数据库中存储过程 已知 当前页 pageIndex 页容量 pageSize 求 总页数 pageCou ...
- HTML CSS 属性大全
CSS 属性大全 文字属性 「字体族科」(font-family),设定时,需考虑浏览器中有无该字体. 「字体大小」(font-size),注意度量单位.<绝对大小>|<相对大小&g ...
- innerText和innerHTML
起因 由于公司的项目以前不考虑浏览器的兼容性问题,当时只考虑ie8浏览器,封装的控件也只针对ie8,我后面的做的时候,也就针对ie8,最近发现,封装的日期控件,在firefox竟然没法显示出来,去看J ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
- codevs 1154 能量项链
传送门 1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在Mars星 ...
- [转]VC++中操作XML(MFC、SDK)
XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作XML有两个库可以用:MSXML和Xml ...
- Docker 与 宿主机之间的文件cp
Docker 与 宿主机之间的文件cp 第一种方法是官方比较推荐的,其实和第二种方法实现是一样的. 第一种方法例: 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下. ...
- wampServer 设置
设置端口 打开 C:\wamp\bin\apache\apache2.4.9\conf\httpd.conf 文件 找到“Listen 80”和“ServerName localhost:80”,紧接 ...
- 大数据 云计算 AI
- 896C
ODT/珂朵莉树 原来这个东西很咸鱼,只能数据随机情况下nloglogn,不过作为卡常还是很好的 大概就是维护区间,值相同的并且连续当成一个区间存在set里,每次区间操作强行分裂就行了. 复杂度因为是 ...