每个进程至少有一个线程,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. WebDriver API——延时操作及元素等待

    在自动化测试过程当中,受网络.测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作. 一般有这么几种方式: 1.implicitlyWait.识别对象 ...

  2. MSP430G2553需要注意的一些参数

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3632952.html 把一些具体芯片信息列出来,以便于查看. 1.时钟 (1)MCLK,Master Clock ...

  3. 为什要使用预编译SQL?

    今天在研发部技术大牛的指点下,我终于明白了为什么要使用SQL预编译的形式执行数据库JDBC:

  4. PIL 安装及使用

    我ubunto虚拟机自带的是python2.7,好像PIL也只支持到2.7. PIL包的安装 Debian/Ubunto Linux下直接安装: sudo apt-get install python ...

  5. poi word 转html (.DOC .DOCX )

    注:不支持图片,支持表格 package com.bjhy.platform.report.commons; import java.io.BufferedWriter; import java.io ...

  6. This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended

    VS2005转换成VS2010时出现的问题: This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x05 ...

  7. servlet里的forward和redirect的区别

    forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);     red ...

  8. keystone nova v2 python

  9. Algorithms : Programming Assignment 3: Pattern Recognition

    Programming Assignment 3: Pattern Recognition 1.题目重述 原题目:Programming Assignment 3: Pattern Recogniti ...

  10. 1.1-1.3 HBase入门

    一.HBASE入门 部分参考链接:https://www.cnblogs.com/steven-note/p/7209398.html 1.简介 HBase – Hadoop Database,是一个 ...