主要内容:
一. 锁
二. 信号量
三. 事件
通过event来完成红绿灯模型
四. 队列(重点)
队列实现进程间的通信
五. 生产者消费者模型
1. 初始版本(程序会阻塞住)
2. 升级版本一(通过抛出异常信号的方式结束进程)
3. 升级版本二(通过发送结束信号的方式结束进程)
第一种: 生产者发结束信号
第二种: 主进程发结束信号
4. 升级版本三(有多个消费者和生产者的时候需要发送多次结束信号)
六. JoinableQuene实现生产者消费者模型
一. 进程同步(锁)
在之前muitiprocessing模块的学习中,当我们使用Process创建子进程时就已经实现了进程的异步了.我们可以让多个任务同时在几个进程中并发处理,它们之间的运行没有顺序,一旦开启也不受人们控制. 尽管并发编程让我们能更加充分的利用IO资源,但与此同时它也带来了新的问题: 进程之间数据不共享但却共享同一套文件系统, 所以几个进程同时访问同一个文件或同一个打印终端,是没有问题的. 可是, 共享带来的是竞争, 竞争的结果就是错乱. 如何进行控制?我们想到了"加锁处理".
import random, os, time from multiprocessing import Process def work(n): print("{} >>> {}号进程正在执行".format(n, os.getpid())) time.sleep(random.random()) print("{} >>> {}号进程执行完毕".format(n, os.getpid())) if __name__ == '__main__': for i in range(5): p = Process(target=work, args=(i,)) p.start() # 执行结果: # 0 >>> 9748号进程正在执行 # 1 >>> 10904号进程正在执行 # 2 >>> 8976号进程正在执行 # 3 >>> 5784号进程正在执行 # 4 >>> 12132号进程正在执行 # 4 >>> 12132号进程执行完毕 # 2 >>> 8976号进程执行完毕 # 3 >>> 5784号进程执行完毕 # 1 >>> 10904号进程执行完毕 # 0 >>> 9748号进程执行完毕