​并发:伪并行,遇到IO,帮我们提高代码执行效率并行:真正的同时运行,多核cpu​

进程:

父进程和子进程

os.getpid()当前进程的id,getppid()父进程的id

创建进程的两种方式:

方式1: from multiprocessing import Process def f(n) print(n)  if __name__ == '__main__': p = Process(target=f,args=(1,)) p.daemon = True p.start() p.join() #主进程等待子进程 方式2: from multiprocessing import Process​ class MyProcess(Process):​ def __init__(self,n): self.n = n super().__init__()​ #这是需要执行的代码逻辑 def run(self): print(self.n) self.f2() print('xxxxxx') def f2(self): xxxx​ if __name__ == '__main__': p = MyProcess(20) p.start() print('主进程结束')​

进程三状态:

就绪 运行 阻塞

进程间通信(IPC)

队列

from multiprocessing import Process,Queueq = Queue(3) #3个长度的队列q.put(1) #如果满了,阻塞程序q.get() #如果没了,阻塞程序q.qsize() #统计一下当前队列里面有多少个数据了q.empty() #是否为空,不可信q.full() #是否满了,不可信q.put_nowait('a') #如果满了就报错,不等待 q.get_nowait() #如果没了就报错,不等待 

进程通过队列通信:

from multiprocessing import Process,Queuedef f1(q): ret = q.get() print('子进程的ret>>',ret)​if __name__ == '__main__': q = Queue(3) q.put('你好') p = Process(target=f1,args=(q,)) p.start()

线程

创建线程的两种方式

方式1from threading import Threaddef f1(n): pass​if __name__ == '__main__': t = Thread(target=f,args=(1,)) t.daemon = True #守护线程 t.start() t.join()方式2:class MyThread(Thread): def __init(self,n): super().__init__() self.n = n def run(self): print(self.n) passif __name__ == '__main__': t = MyThread('aa') t.start() 

守护线程和守护进程的区别

守护进程:随着主进程的代码执行结束,而结束守护线程:随着所有非守护线程的执行结束而结束

互斥锁 Lock

作用:多线程或者多进程在操作共享数据的时候,会出现数据混乱的问题,加锁处理,牺牲了效率,保证了安全.from threading import Thread,Lockfrom multiprocessing import Process,Lockdef f1(loc): loc.acquire() xxxx loc.release()  with loc: xxxxx​loc = Lock()t = Thread(target=f1,args=(loc,))t.start()​

递归锁 RLock

死锁现象,内部维护了一个计数器from threading import Thread,RLockfrom multiprocessing import Process,RLock​loc = RLock()t = Thread(target=f1,args=(loc,))t.start()​

线程队列:

import queue#先进先出的q = queue.Queue(4)...#先进后出的q = queue.LifoQueue(4)#优先级的q = queue.PriorityQueue(4)q.put((1,'xx')) #数字越小,优先级越高,越早被取出q.get() -- (1,'xx')如果优先级数字相同,后面的值类型不能不一样,而且两个字典也不能比

线程池和进程池

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor#线程池ThreadPoolExecutor#进程池ProcessPoolExecutor​def f1(n,m) pass return n*n def call_back(m): m.result()--n*n print(m) #结果集对象 print(m.result())​pool = ThreadPoolExecutor(max_workers=5)pool = ProcessPoolExecutor(max_workers=5)ret = pool.submit(f1,1,2)ret.result() #类似join,拿不到结果就阻塞程序pool.shutdown() #关闭池子pool.submit(f1,1,2).add_done_callback(call_back)​

协程

gevent --- 基于greenlet模块

def f1(n):

pass

def f2(n):

pass

g1 = gevent.spawn(f1,1)

g2 = gevent.spawn(f2,1)

g1.join() #一个一个的join

gevent.joinall([g1,g2])

print('主任务')

主进程和子进程_Python - 进程-线程-协程相关推荐

  1. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

  2. 4.19 python 网络编程和操作系统部分(TCP/UDP/操作系统概念/进程/线程/协程) 学习笔记

    文章目录 1 网络编程概念 1)基本概念 2)应用-最简单的网络通信 2 TCP协议和UDP协议进阶(网络编程) 1)TCP协议和UDP协议基于socket模块实现 2)粘包现象 3)文件上传和下载代 ...

  3. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  4. linux的进程/线程/协程系列1:进程到协程的演化

    linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...

  5. 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 > 线程 > 协程 系统资源占用量:进程 > 线程 > 协程 ...

  6. linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep

    linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...

  7. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  8. 进程 线程 协程 各自的概念以及三者的对比分析

    文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...

  9. 线程/协程/异步的编程模型(CPU利用率为核心)

    最近看了一个b站博主的视频https://www.bilibili.com/video/av64066246/讲到了线程/协程/异步的编程模型,这里做下记录 1.线程 上篇文章有聊到进程和线程的关系, ...

  10. python协程实现一万并发_python中的协程并发

    python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...

最新文章

  1. OpenCV拼接细节stitching detailed的实例(附完整代码)
  2. CRMEB系统开发文档
  3. MPEG创始人、主席:MEPG商业模式已经破裂
  4. 征信逾期花钱就能修复?小心跳进骗子的坑里面去
  5. Unity 获得某个物体的主贴图
  6. HTML5 语义元素
  7. 淘宝客商城带分销APP源码(原生双端IOS+安卓+后台+数据 库+开发文档),用于学习或二开使用,开发语言:安卓java,苹果oc,后台php。
  8. C中字符串常量字符数组字符常量
  9. 时间序列分析-MA模型
  10. 2021-03-30 libnice 应用 多线程
  11. ntfs磁盘格式是什么?NTFS如何读写Mac硬盘?
  12. 转!!以太网方案设计
  13. PV-1033/PV-1233/EVP-M33插装式压力补偿流量阀比例放大器
  14. 弘辽科技:如何书写淘宝直通车创意标题才能带来更多的流量?
  15. UVA11021 Tribles 概率
  16. 20135203齐岳 信息安全系统设计基础第五周学习总结
  17. ERROR: No Jack server running
  18. JAVA 映射HashMap和HashTable的区别和实用
  19. 常见的注册表操作及其含义
  20. 电脑双屏显示变单屏后部分程序无法在当前屏幕显示的问题

热门文章

  1. OD使用教程23 - 调试篇23
  2. spring boot mail发送邮件异常解决
  3. php替换字符串字符,php替换字符串中间字符为省略号的方法
  4. 构建自定义的同步工具
  5. 线上问题:大事务问题
  6. Spring中的循环依赖(单例)
  7. ffmpeg和mencoder实现视频转码
  8. Vue.directive使用注意
  9. 行尸走肉第八季/全集The Walking Dead迅雷下载
  10. vim粘贴代码格式变乱