多进程
- 进程之间没有共享的状态。
- 进程的一个主要问题:进程间通讯(InterprocessCommunication, IPC )
进程的创建,三种方式
-
fork()
-
直接生成multiprocessing.Process实例对象。(首先需要导入multiprocessing包)
p = multiprocessing.Process( target=clock, args= (5,)) # 注意两个参数
p.start()
- 派生子类,注意类的命名xxxProcess。
class ClockProcess(multiprocessing.Process):
'''
两个函数比较重要
1.init构造函数
2.run函数,一般不放参数
'''
def __init__(self, interval):
super().__init__()
self.interval = interval
def run(self):
while True:
print("The time is %s" % ctime())
sleep(self.interval)
进程ID
- 每个进程都有一个id
- 可以在os中查看pid(进程id),ppid(父进程id)以及它们的关系
from multiprocessing import Process
import os # 查看进程,引入os包
多进程中,生产者消费者问题
- 在多进程中,通过queue,增加了生产者和消费者之间的联系。
- 可以使用JoinableQueue(是queue的一种,消费者干完仓库中领到的任务之后,会给一个反馈)
- 队列中哨兵的使用,通知
- 缺点:如果有5个进程,第一个进程取出None,就撤了。剩下的q中没有None值,则其他的4个进程不知道什么时候撤了
- 所以要进行改进 - 哨兵的改进
- 有几个进程,就放几个哨兵值
- 具体的哨兵值,可以是None,-1,100等任意字符串
注:本文是本人根据北京图灵学院的python课程自己整理的笔记哒,转载请注明出处哈~