Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

自己造成的死锁, 无法解开

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

可重入锁

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

可重入锁的替代方法

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

线程同步之条件变量

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
con.wait()只要线程执行到了这个位置线程及堵塞目的是等待con.notify通知继续执行
类似于互斥锁, 可以上锁, 可以解锁
如果有多个wait, 当遇到notify的时候由系统决定首先执行哪一个wait继续执行
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

线程同步之队列

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

线程间通信event

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
一秒钟之后
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

线程的合并join

  • join能等待
    Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
运行结果
在for循环的第一次时, 这是有两个线程到底先执行13行还是27行有系统决定, 所以可能首先打印27行也可能打印13行, 但是确定的是最后打印的两次一定是13行 , 因为sleep了1秒
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

用join来等待子线程执行完成(也可回收子线程的垃圾)
通过join完成的事情是主线程在等待子线程的结束, 如果子线程不结束那么主线程一直在等待
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

设置等待时间 , 一般不用
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

守护线程

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

threading.local()

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

多进程

fork创建子进程

  • 运行的程序叫做进程
    Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
    Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

fork过程

  • 运行fork的过程是创建一个子进程, 创建的时候会复制父进程的所有东西
    Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

多次fork

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

进程号

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)

获取进程pid和父进程的pid

Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)
Python(可重入锁-线程同步之条件变量-队列-线程通信event-线程合并join-多进程)