每个进程至少有一个线程,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进程和线程:的更多相关文章

  1. python 学习笔记八 进程和线程 (进阶篇)

    什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执 ...

  2. Python学习之GIL&进程池/线程池

    8.6 GIL锁** Global interpreter Lock 全局解释器锁 实际就是一把解释器级的互斥锁 In CPython, the global interpreter lock, or ...

  3. Python学习之路--进程,线程,协程

    进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Q ...

  4. Python学习笔记 - day13 - 进程与线程

    概述 我们都知道windows是支持多任务的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多 ...

  5. Python全栈【进程、线程】

    Python全栈[进程.线程] 本节内容: 进程 线程 协程 I/O多路复用 进程 1.进程就是一个程序在一个数据集上的一次动态执行过程,进程是资源分配的最小单元. 2.进程一般由程序.数据集.进程控 ...

  6. python并发编程之进程、线程、协程的调度原理(六)

    进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...

  7. Python Web学习笔记之进程与线程

    要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空 ...

  8. Python之路,Day9, 进程、线程、协程篇

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  9. python中socket、进程、线程、协程、池的创建方式和应用场景

    进程 场景 利用多核.高计算型的程序.启动数量有限 进程是计算机中最小的资源分配单位 进程和线程是包含关系 每个进程中都至少有一条线程 可以利用多核,数据隔离 创建 销毁 切换 时间开销都比较大 随着 ...

随机推荐

  1. php-get和post请求

    1.get请求 <?php //判断20130101是否是工作日 //工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2: $url='http://www.easybots ...

  2. codeforces B. Bear and Strings 解题报告

    题目链接:http://codeforces.com/problemset/problem/385/B 题目意思:给定一条只有小写英文组成的序列,需要找出至少包含一个“bear”的单词的子序列个数.注 ...

  3. html5--3.9 input元素(8)

    html5--3.9 input元素(8) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...

  4. hdu-5003 Osu!(水题)

    题目链接: Osu! time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Prob ...

  5. jquery跨域3

    这两天用 Jquery 跨域取数据的时候,经常碰到 invalid label 这个错误,十分的郁闷,老是取不到服务器端发送回来的 json 值, 一般跨域用到的两个方法为:$.ajax 和$.get ...

  6. Jasper:API / 后向兼容性

    ylbtech-Jasper:API / 后向兼容性 1.返回顶部 1. 后向兼容性 为了给客户提供创新的业务解决方案,Cisco Jasper 会定期扩展我们 API 框架的功能.我们会尽最大努力确 ...

  7. 纯java config配置Spring MVC实例

    1.首先创建一个Maven工程,项目结构如下: pom.xml添加Spring和servlet依赖,配置如下 <project xmlns="http://maven.apache.o ...

  8. CF-807B

    B. T-Shirt Hunt time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  9. Asset Catalog Help (四)---Adding an iOS App Icon Set or Launch Image Set

    Adding an iOS App Icon Set or Launch Image Set Organize different resolutions of your app icons and ...

  10. 服务迁移之路 | Spring Cloud向Service Mesh转变

    一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...