第一章:多进程和多线程
进程的概念:
· 系统操作和运行的基本单位
· 多任务运行,效率高
multiprocessing模块
import multiprocessing
app_name = multiprocessing.Process()
app_name.start()
进程信息获取:
· 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
死锁:
· 一直等待对方释放资源的情况
· 锁一定要注意释放,否则后果很惨烈
进程和线程的对比:
· 线程依附于进程
· 进程默认一条线程,但可以多个线程
· 进程之间不共享全局变量
· 线程之间共享全局变量
· 进程资源开销大
· 进程为系统的基本单位
· 进程可以多核运行,线程无法多核,只能并行运行