- from multiprocessing import Process, Queue,Pool
- import time
- import os
- def producer(q):
- for i in range(5):
- time.sleep(0.6)
- print("生产第 %s 个包子" % (i + 1))
- res = i + 1
- q.put(res) # 没生产一个, 往队列里加一个
- time.sleep(1)
- q.put(None)
- def cousumer(q):
- while True:
- res = q.get()
- if res == None:
- break
- time.sleep(1)
- print("消费者吃的第 %s 个包子" % res)
- if __name__ == '__main__':
- '''
- 进程:
- target: 表示调用对象, 也就是子进程要执行的对象
- args: 调用对象的位置参数元组
- kwargs: 调用对象的字典
- name: 子进程的名字
- p.join([timeout]): 主线程等待 P 终止
- 进程队列: 进程彼此隔离, 要实现进程之间的通信, 可以使用队列和管道
- q = Queue([maxsize])
- q.put('123') #往队列中加元素
- q.get('123') #往队列中读取并删除一个元素
- q.full() #判断队列是否已经满了, 满了再放进去就会阻塞
- q.empty() #判断队列是否已经空了, 空了就不能再 get
- '''
- q = Queue()
- p_lst = []
- for i in range(5):
- s1 = "子进程" + "producer"
- s2 = "子进程" + "cousumer"
- p = Process(target=producer, args=(q,), name=s1)
- c = Process(target=cousumer, args=(q,), name=s2)
- p.start()
- c.start()
- print(p.pid)
- p_lst.append(p)
- print(p.is_alive()) # 判断进程 P 是否存话
- # p.terminate() # 终止 P 进程
- print(p.is_alive())
- p.join()
- '''
- 需要等待子进程执行完毕后才能继续执行, 就需要有一种机制能够让主进程检测子进程是否运行完毕, 在子进程执行完毕后才继续执行, 否则一直在原地阻塞, 这就是 join 方法的作用
- 看清楚: join 作用是让主进程等待子进程结束, 其他子进程并不会停止
- '''
- time.sleep(1)
- print("执行主进程")
- print(p_lst)
来源: http://www.bubuko.com/infodetail-2981315.html