Python3 并发编程1
操作系统发展
穿孔卡片
- 一个计算机机房, 一次只能被一个卡片使用
批处理
将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行
联机批处理系统: 在主机与输入机之间增加一个存储设备--磁带
脱机批处理系统: 增加一台不与主机相连而专门用于与输入/输出设备打交道的卫星机
多道技术(单核)
- 单道: 计算机内存中只运行一个程序
- 多道: 计算机内存中穿插运行多个程序
- 当前执行程序遇到I/O操作, CPU会转而运行其他程序
- 当前程序占用CPU时间过长, CPU也会运行其他程序
- 优点: 提高CPU的利用率
- 缺点: 程序的执行效率降低
并发与并行
- 并发: 在一个时间段内有多个程序在运行(分时交替)
- 并行: 在一个时间点有多个程序在运行
进程
程序与进程
- 程序: 有序的指令和数据的集合
- 进程: 程序关于某个数据集合的一次运行活动, 是系统进行资源分配和调度的基本单位
进程调度
- 先来先服务: 哪个进程先就绪就占用CPU, 进程阻塞或结束让出CPU
- 短作业优先: 预计执行时间短的进程优先
- 时间片轮转: 进程在就绪队列的等待时间与享受服务的时间成正比
- 多级反馈队列: 设置多个就绪队列, 分布赋予不同的优先级
进程的三个状态
- 就绪状态: 所有进程创建时都会进入就绪状态, 准备被调度
- 运行状态: 进程被调度后就会获得CPU执行, 成为运行状态
- 阻塞状态: 当进程遇到I/O操作时, 就会变为阻塞状态
同步和异步
面向被调用者的消息通知机制
同步: 被调用者得到结果再返回
异步: 被调用方先返回, 再执行, 得到结果后再通知调用者
阻塞与非阻塞
面向调用者的消息等待时的状态
阻塞: 在调用结果返回前, 当前线程会被挂起等待, 知道拿到调用结果才会继续进行
非阻塞: 在调用结果返回前, 可以继续进行其他操作
僵尸进程与孤儿进程
- 僵尸进程: 指的是子进程已经结束, 但PID还在, 未被回收
- 孤儿进程: 指的是子进程还在进行, 但父进程意外结束
守护进程
- 指的是主进程结束后, 该主进程产生的所有子进程跟着结束并回收
from multiprocessing import Process
from multiprocessing import current_process
import time
def task(name):
print(f'{name} started...', current_process().pid)
time.sleep(1)
print(f'{name} stopped...', current_process().pid)
if __name__ == '__main__':
p = Process(target=task, args=('bigb',))
p.daemon = True
p.start()
print('主进程')
# 主进程
Python中的进程操作
Process创建进程
from multiprocessing import Process
import time
def task(name):
print(f'{name}的任务开始执行!')
time.sleep(1)
print(f'{name}的任务已经结束!')
# 创建子进程时, 子进程会加载并执行父进程代码
if __name__ == '__main__':
# targent=执行函数的地址, args是该函数需要传入的参数
p = Process(target=task, args=('bigb',))
# 启动进程,并调用子进程中的p.run()
p.start()
print('主进程')
'''
主进程
bigb的任务开始执行!
bigb的任务已经结束!
'''
from multiprocessing import Process
import time
class MyProcess(Process):
def run(self):
print('子进程任务开始执行!')
time.sleep(1)
print('子进程任务已经结束!')
if __name__ == '__main__':
p = MyProcess()
# 启动进程,并调用子进程中的p.run()
p.start()
print('主进程')
'''
主进程
子进程任务开始执行!
子进程任务已经结束!
'''
p.join()主进程等待子进程终止
from multiprocessing import Process
import time
def task(name):
print(f'{name}的任务开始执行!')
time.sleep(1)
print(f'{name}的任务已经结束!')
if __name__ == '__main__':
p = Process(target=task, args=('bigb',))
p.start()
p.join()
print('主进程')
'''
bigb的任务开始执行!
bigb的任务已经结束!
主进程
'''
current_process().pid获取子进程pidos.getpid获取主进程pidtasklist | findstr pidcmd中查看pid属于哪个进程p.is_alive()判断p进程是否存活p.terminate()终止p进程
进程间数据相互隔离
from multiprocessing import Process
x = 1
def foo():
global x
x = 2
if __name__ == '__main__':
p = Process(target=foo)
p.start()
print(x) # 1
Python3 并发编程1的更多相关文章
- Python3 并发编程4
目录 Event事件 线程池与进程池 基本概念 使用方法 和信号量的区别 协程(coroutine) 基本概念 实现方式 多线程爬取梨视频 Event事件 用来控制线程的执行 e.isSet()查看对 ...
- Python3 并发编程3
目录 GIL全局解释器锁 基本概念 多线程的作用 死锁现象 递归锁 信号量 线程队列 GIL全局解释器锁 基本概念 global interpreter lock 全局解释器锁 GIL不是Python ...
- Python3 并发编程小练习
实现基于TCP协议套接字,服务端实现接收客户端的连接并发 # server.py import socket from threading import Thread server = socket. ...
- Python3 并发编程2
目录 进程互斥锁 基本概念 互斥锁的使用 IPC 基本概念 队列 生产者消费者模型 基本概念 代码实现 线程 基本概念 创建线程 线程互斥锁 进程互斥锁 基本概念 临界资源: 一次仅允许一个进程使用的 ...
- Python3 与 C# 并发编程之~ 进程篇
上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...
- Python3 与 C# 并发编程之~ 协程篇
3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...
- Python3 与 C# 并发编程之~进程先导篇
在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...
- Python3 与 C# 并发编程之~ 线程篇
2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...
- asyncio:python3未来并发编程主流、充满野心的模块
介绍 asyncio是Python在3.5中正式引入的标准库,这是Python未来的并发编程的主流,非常重要的一个模块.有一个web框架叫sanic,就是基于asyncio,语法和flask类似,使用 ...
随机推荐
- opencv各种小例子
图像腐蚀 #include <opencv2/highgui/highgui.hpp>//OpenCV highgui 模块头文件 ~ #include <opencv2/imgpr ...
- vue项目引入自定义.css的样式文件
ES6的引入方式: .vue文件中 css文件引入 <template></template> <style scoped> @import "../as ...
- Flex带CheckBox的Tree(修改ItemRenderer)
此文代码参考了:http://summerofthatyear-gmail-com.iteye.com/blog/326302 在此表示感谢! 前文提到了,实现带CheckBox的Tree有两种方法: ...
- 扛把子组作业要求 20191024-3 互评Alpha阶段作品
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860] 组名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 ...
- 图解 Spring:HTTP 请求的处理流程与机制【3】
3. HTTP 请求在 Web 应用中的处理流程 在穿越了 Web 容器之后,HTTP 请求将被投送到 Web 应用,我们继续以 Tomcat 为例剖析后续流程.Web 容器与 Web 应用的衔接是通 ...
- linuxLVM之LV扩大和缩小容量(非xfs文件系统)
LVM的基础请见:https://www.cnblogs.com/wxxjianchi/p/9698089.html 一.放大LV的容量.放大容量是由内而外来操作的. 1.设置新的lvm分区:用fdi ...
- scrapy知识补充--scrapy shell 及Spider
什么是scrapy shell? Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试xpath或css表达是,来查看他们的工作方式,方便爬取页面中的数据 ...
- word2vec:主要概念和流程
1.单词的向量化表示 一般来讲,词向量主要有两种形式,分别是稀疏向量和密集向量. 所谓稀疏向量,又称为one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的 ...
- 2场 J -Subarray
题意: 长度为1e91e9的(1,−1)(1,−1)序列,下标从00到1e9−11e9−1,已知有nn个区间为11,其他为−1−1, 问存在多少个区间的和>1>1(保证∑1≤i≤nr[i] ...
- 69道Spring面试题及答案
目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...