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类似,使用 ...
随机推荐
- spark和 mapreduce的比较
网上查阅一些资料,收集整理如下: 1. 通用性 spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块 ...
- c#控制台玩飞行棋游戏
using System; namespace Game{ class Program { //用静态字段模拟全局变量 public static int[] Maps = new int[100]; ...
- 前端与算法 leetcode 7. 整数反转
目录 # 前端与算法 leetcode 7. 整数反转 题目描述 概要 提示 解析 解法 算法 传入测试用例的运行结果 执行结果 GitHub仓库 # 前端与算法 leetcode 7. 整数反转 题 ...
- Arduino 将 String 转化为 int
Arduino 将 String 转化为 int 函数:toInt() 实例: String my_str = "; int my_int = my_str.toInt();
- Docker从入门到实践(1)
一.Docker简介 1.1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多 ...
- js对象的sessionStorage,判断对象相等,判断是否包含某属性
一,storage storage只能存储字符串的数据,对于JS中常用的数组或对象却不能直接存储 因此需要借JSON进行类型转化来存储: let obj = { name:'Jim' } sessio ...
- Java中的工具类究竟如何命名?
先来几个例子 JDK自带工具类 Arrays.asList(); Objects.equals(); Collections.sort(); Spring框架工具类 StringUtils.isEmp ...
- 【集合系列】- 深入浅出的分析 WeakHashMap
一.摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap.LinkedHashMap.TreeMap.IdentityHashMap.WeakHashMap.Hashtable.P ...
- ArcGIS Server10.4安装教程
准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso 破解文件:Lic10.4.1.ecp #安装Server前, ...
- TypeError: Cannot read property '_t' of undefined (VUE + ElementUI + i18n)
在使用vue的ElementUI库,在多语言时报错: TypeError: Cannot read property '_t' of undefined 错误是在点菜单栏时随机抛出的,F12抓不到,只 ...