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类似,使用 ...
随机推荐
- SpringBoot基本配置详解
SpringBoot项目有一些基本的配置,比如启动图案(banner),比如默认配置文件application.properties,以及相关的默认配置项. 示例项目代码在:https://githu ...
- ESP8266 使用AT指令
ESP8266 使用AT指令 问题:串口调试工具输入AT指令没返回结果 分析板子有两种模式 下载模式(默认) 运行模式 解决办法: 方法一:按下板子上的 RST 键位 方法二:使用 [安信可串口调试工 ...
- nyoj 260-数数小木块 (打表)
260-数数小木块 内存限制:64MB 时间限制:3000ms 特判: No 通过数:17 提交数:24 难度:1 题目描述: 在墙角堆放着一堆完全相同的正方体小木块,如下图所示: 因为木块堆得实在是 ...
- 从cocos2dx源代码看android和iOS跨平台那些事
cocos2dx一个跨移动(平板)平台的游戏引擎,支持2d和3d,基于c/c++,网上介绍多在此不详叙.我们本篇关心的是跨平台那些事,自然而然就找到platform目录.好家伙,支持的操作平台还真不少 ...
- Redux第一节
安装脚手架 npm i -g create-react-app 创建一个Dom create-react-app demo01 安装 Ant Design npm i antd --save 安装re ...
- node中mysql和短信使用方法(3)
一.mysql的使用 使用mysql首先得有数据库并且表里面有数据,我创建了数据库newsql,里面Tables有表company等等. company有id,name,other等字段 1.导入my ...
- python3快速入门教程错误和异常
Python 中(至少)有两种错误:语法错误(syntax errors)和异常(exceptions). 语法错误 语法错误又称作解析错误: >>> while True prin ...
- linux终端操作
------------恢复内容开始------------ tab键自动补全 ls列出当前文件目录: 默认是当前目录 “.”代表当前目录 “..”代表父目录 -a显示所有,而隐藏文件的第一字符为点“ ...
- 【译】为什么永远都不要使用MongoDB Why You Should Never Use MongoDB
背景 最近在学习DDIA(Designing Data-Intensive Applications)这本分布式领域非常急经典的入门书籍,里面第二章<数据模型与查询语言>,强调了对一对多. ...
- 转帖:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
地址:http://www.ihref.com/read-16422.html