Python进阶:多进程、多线程

第一章:多进程和多线程

进程的概念:
· 系统操作和运行的基本单位
· 多任务运行,效率高
multiprocessing模块
# 一般使用方法
# 导入模块
import multiprocessing
# 创建对象
# Process()
# 主要参数,target=执行函数名,name和group暂时不考虑
# args以元组方式传参,kwargs以字典方式传参
app_name = multiprocessing.Process()
# 启动任务
app_name.start()
# 示例:CH1/1.multiProcess.py
进程信息获取:
· os.getpid() 获取当前进程的编号
· os.getppid() 获取当前进程父进程的编号
· 示例:1/2.getPid.py
进程之间变量使用:
· 子进程之间不共享使用全局变量
· 因为子进程是对主进程的拷贝完成运行,子进程之间完全独立
进程之间结束顺序:
· 主进程不会等待子进程全部执行完毕才结束
· 因此一般通过下边两种方法守护主进程,就是销毁子进程
· 设置app_name.daemon = True 销毁子进程
· 或者app_name.terminate() 也可以销毁子进程

线程的概念:
· 程序执行的最小单位,子线程之间共享资源
def func():
    pass
# 导入线程模块
import threading
# 创建线程对象
thread_name = threading.Thread(target=func)
· 传参方式与多进程相似,支持args和kwargs
线程结束顺序:
· 同进程,需要守护
线程间执行顺序:
· 线程之间运行顺序无序,与其说无序,不如说是CPU需要根据资源进行调度
线程共享变量存在的问题:
· 解决办法:线程同步,就行有先后执行顺序
· 实现方法:互斥锁
互斥锁:
· 对共享数据进行锁定,保证同一时刻只有一个线程操作资源
import threading
# 创建互斥锁
mutex = threading.Lock()
# 上锁
mutex.acquire()
# 释放锁
mutex.release()

· 示例:CH1/6.threadLock.py
死锁:
· 一直等待对方释放资源的情况
· 锁一定要注意释放,否则后果很惨烈
进程和线程的对比:
· 线程依附于进程
· 进程默认一条线程,但可以多个线程
· 进程之间不共享全局变量
· 线程之间共享全局变量
· 进程资源开销大
· 进程为系统的基本单位
· 进程可以多核运行,线程无法多核,只能并行运行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值