linux-进程与线程 概括
进程 运行的程序
四种创建 方法
第一种
os模块 fork() 创建 fork在子进程和父进程中返回的值不同 子进程返回0 父进程返回创建的子进程PID getpid 获取当前进程PID getppid获取父级进程PID
第二种 multiprocessing 中Process 类
实例类
Process(group,target,name,args,kwargs)
group 进程组
target 调用对象
name 名字
args 参数 元祖形式
kwargs 参数 字典格式
常用方法
is_alive 判断是否运行
start 运行
join 主进程阻塞 等待子进程结束
run
terminate 立即终止
第三种 写一个Process 的派生类重写run方法
第四种 Pool 进程池
Pool() 创建进程池
apply_async(func,args,kwargs)
apply(func,args,kwargs)
都是分配任务一个异步一个同步
close 关闭进程池接受任务
join 主进程阻塞 等待子进程
terminate
进程间通信 通过 Queue 进程池需要用Manager().Queue()
方法
qsize 查看当前队列个数
full 判断队列是否满了
empty 判断队列是否为空
get(block,timeout) 获取信息 默认block True 同步
put(item,block ,timeout )添加信息
get_nowait()
put_nowait()
线程
多线程 threading Thread 类
实例 或者创建 派生类
用法和Process 差不多
可以共享全局变量 但是会产生 并发竞争 通过锁机制
Lock () 创建锁
acquire 获取锁
release 释放锁
互斥锁
特殊情况 死锁 解决方案 银行家算法 或者使用超时机制
消费者和生产者模式 通过 Queue 中Queue py2 py3 queue 中Queue 来解除线程之间的关联 解耦作用
全局变量多线程不受影响 通过 threading.local()