一、进程与线程

  1.进程:程序的一次执行(程序装载入内存,系统分配资源运行)。n 每个进程有自己的内存空间、数据栈等,只能使用进程间通讯,而不能直接共享信息

  2.线程:所有线程运行在同一个进程中,共享相同的运行环境。    

    (1)n 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

    (2) 线程的运行可以被抢占(中断),或暂时被挂起(睡眠),让其他线程运行(让步)。n     (3)一个进程中的各个线程间共享同一片数据空间。

二、全局解释器锁GIL

  1.GIL全称全局解释器锁Global Interpreter Lock,GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念

  2.GIL是一把全局排他锁,同一时刻只有一个线程在运行。

    (1) 毫无疑问全局锁的存在会对多线程的效率有不小影响。甚至就几乎等于Python是个单线程的程序

    (2)multiprocessing库的出现很大程度上是为了弥补thread库因为GIL而低效的缺陷。它完整的复制了一套thread所提供的接口方便迁移。唯一的不同就是它使用了多进程而不是多线程。每个进程有自己的独立的GIL,因此也不会出现进程之间的GIL争抢

# 顺序执行多个单线程和同时执行多个并发线程效率比较,下面实现两个线程顺序执行
from threading import Thread
import time def my_counter(): #定义一个顺序数数的函数
i =
for _ in range():
i= i +
return True def main():
thread_array={}
start_time=time.time()
for tid in range():
t = Thread(target=my_counter)
t.start() #同时开始两个线程
thread_array[tid]=t
for i in range():
thread_array[tid] = t
for i in range():
thread_array[i].join()
end_time=time.time()
print("Total time:{}".format(end_time-start_time)) if __name__=='__main__':
main()
from threading import Thread
import time
def my_counter():
i =
for _ in range():
i = i+
return True
def main():
thread_array={}
start_time = time.time()
for tid in range(): # 两个线程顺序执行
t = Thread(target=my_counter) # 将数数的线程调用进来
t.start()
t.join()
end_time = time.time()
print("Total time:{}".format(end_time-start_time)) if __name__=='__main__':
main()

三、python多进程

fork操作:

  n 调用一次,返回两次。因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后分别在父进程和子进程内返回。子进程永远返回0,而父进程返回子进程的ID。子进程只需要调用getppid()就可以拿到父进程的ID

四、multiprocessing

multiprocessing是跨平台版本的多进程模块,它提供了一个Process类来代表一个进程对象

五、进程间通信Queue

Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递

python学习笔记(13):python并发编程以及系统常用模块的更多相关文章

  1. 【JulyEdu-Python基础】第 7 课:Python并发编程以及系统常用模块

    主要内容 Python多进程与多线程 Python使用Hadoop分布式计算库mrjob Python使用Spark分布式计算库PySpark 例子:分别使用MapReduce和Spark实现word ...

  2. python 学习笔记 13 -- 经常使用的时间模块之time

    Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...

  3. 吴裕雄--天生自然python学习笔记:Python3 网络编程

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  4. python学习笔记13(模块、包)

    在Python中有一个概念叫做模块(module),比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块. 模块文件以.py后缀结 ...

  5. Python学习笔记13:标准库之子进程(subprocess包)

    ubprocess包主要功能是运行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及经常使用的封装函数 当我们执行python的时候,我们都是在 ...

  6. python 学习笔记 9 -- Python强大的自省简析

    1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...

  7. Python学习笔记——基础篇【第五周】——模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  8. python学习笔记(1)--python特点

    python诞生于复杂的信息系统时代,是计算机时代演进的一种选择. python的特点,通用语言,脚本语言,跨平台语言.这门语言可以用于普适的计算,不局限于某一类应用,通用性是它的最大特点.pytho ...

  9. Python学习笔记 - day12 - Python操作NoSQL

    NoSQL(非关系型数据库) NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.用于超大规模数据的存储.(例如 ...

随机推荐

  1. git的fetch

    1.git fetch 会从远程分支上下载 2.git pull 会将本地库更新至远程库最新状态

  2. LeetCode--617--合并二叉树(python)

    给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...

  3. css盒子模型中的border属性

        认识border属性 我们可以通过boder属性来为元素设置边框:元素的边框 (border) 是围绕元素内容和内边距的一条或多条线.CSS border 属性允许你规定元素边框的样式.宽度和 ...

  4. B/S实现大视频上传

    在公司做B/S 开发与维护三年啦, 对B/S架构的了解也是只知大概,对于这种基础知识还是很有必要理一理哒.趁空去网上查阅了资料,顺便整理一份笔记供以后查询. 一. B/S的概念 B/S(Brower/ ...

  5. [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]

    [bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...

  6. Form 表单用 Ajax 提交数据并用 jQuery Validate 验证

    表单填写需要验证可用插件 jQuery Validate 提交数据使用 Ajax 可操控性得到提到 注意:请自行引入 jQuery 和 jQuery Validate HTML 代码 <form ...

  7. oracle数据泵导入导出

    1.首先建立DUMP_DIR sqlplus / as sysdba select * from dba_directories 如果没有DUMP_DIR就执行下面的语句 CREATE OR REPL ...

  8. JS判断Android、iOS或浏览器的多种方法(四种方法)

    第一种:通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端. 代码如下: <script type="text/javascript"> ...

  9. 北风设计模式课程---里氏替换原则(Liskov Substitution Principle)

    北风设计模式课程---里氏替换原则(Liskov Substitution Principle) 一.总结 一句话总结: 当衍生类能够完全替代它们的基类时:(Liskov Substitution P ...

  10. awk调用系统命令

    cmd = ("the linux command") cmd | getline dk; close(cmd) dk stores the output of the comma ...