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、进程、线程、协程、池的创建方式和应用场景
进程 场景 利用多核.高计算型的程序.启动数量有限 进程是计算机中最小的资源分配单位 进程和线程是包含关系 每个进程中都至少有一条线程 可以利用多核,数据隔离 创建 销毁 切换 时间开销都比较大 随着 ...
随机推荐
- 在jboss中部署可执行jar, deploy executable jar in jboss
首先,题目是个伪命题, jboss容器是不支持直接部署可执行jar包的,jar只会被加载当作lib对待.这里提供了一个小的变通方案. 今天我遇到个问题,把我们的项目中的监控模块独立成一个小项目部署,监 ...
- 千锋很火的SpringBoot实战开发教程视频
springboot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...
- ansible j2文件注意事项
j2文件中使用变量的时候,不需要 {{}} 遇到if,for等条件判断语句,变量的话,只需要变量名即可, 字符串需要 加上引号.
- dtd文件中写的引用实体被xml文件引用后无法在浏览器中显示的问题
解决方案:把dtd文件由被xml文件外部引用改成被xml文件内部引用. 例子: 1.xml文件: <?xml version="1.0" encoding="UTF ...
- .PHP生成静态html文件的方法
1. [代码][PHP]代码 1,下面使用模版的一个方法! <?php $fp = fopen ("templets.html","a"); ...
- Linux删除乱码非空目录
# ls -li 总用量 drwxr-xr-x root root 2月 : 2.1 -rw-rw-r-- binwen binwen 2月 : Htc_常用软件.zip drwxr-xr-x roo ...
- hdu-5670 Machine(水题附上java代码)
题目链接: Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描 ...
- Spring 事务管理高级应用难点剖析: 第 2 部分
本文是“Spring 事务管理高级应用难点剖析” 系列文章的第 2 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括混合使用多种数据访问技术(如 Spring JD ...
- zookeeper分布式安装
1.先把zookeeper-3.5.2-alpha.tar上传解压到/usr/local/下重命名为zookeeper ############# zookeeper env ############ ...
- Flutter实战视频-移动电商-43.详细页_补充首页跳转到详细页
43.详细页_补充首页跳转到详细页 首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.ro ...