Python9-进程池-day38

复习

# 信号量
from multiprocessing import  Semaphore
# 用锁的原理实现的,内置了一个计数器
# 在同一个事件,只能有指定数量的进程执行某一段被控制住的代码
# 事件
# wait阻塞受到事件控制的同步组件
# 状态  True  Flase  is_set
#         true--》false  用clear()
#         false --->true  用set()
# wait方法 状态为true不阻塞  状态为false的时候阻塞

# 队列
# Queue
#     put     当队列满的时候阻塞等待队列有空位置
#     get     当队列空的时候阻塞等待队列有数据
#     full empty  不完全准确

# JoinableQuere
# task_done   与get连用
# join        与put连用

管道

from multiprocessing import Pipe,Process
def func(conn1,conn2):
    conn2.close()
    while True:
        try:
            msg = conn1.recv()
            print(msg)
        except EOFError:
            conn1.close()
            break

if __name__ == '__main__':
    conn1,conn2 = Pipe()
    Process(target=func,args=(conn1,conn2)).start()
    conn1.close()
    for i in range(20):
        conn2.send('吃了吗')
    conn2.close()
from multiprocessing import  Pipe,Process
import time,random
def producer(con,pro,name,food):
    con.close()
    for i in range(4):
       time.sleep(random.randint(1,3))
       f = '%s生产%s%s'%(name,food,i)
       print(f)
       pro.send(f)
    pro.close()
def consumer(con,pro,name):
    pro.close()
    while True:
        try:
           food =  con.recv()
           print('%s吃了%s'%(name,food))
           time.sleep(random.randint(1,3))
        except EOFError:
            con.close()
            break
if __name__ == '__main__':
    con,pro = Pipe()
    p = Process(target=producer,args = (con,pro,'egon','泔水'))
    p.start()
    c = Process(target=consumer,args = (con,pro,'alex'))
    c.start()
    con.close()
    pro.close()
进程之间的数据共享
from multiprocessing import  Manager,Process,Lock

def main(dic,lock):
    lock.acquire()
    dic['count'] -= 1
    lock.release()


if __name__ == '__main__':
    m = Manager()
    l = Lock()
    dic = m.dict({'count':100})
    p_list = []
    for i in range(50):
        p = Process(target=main,args=(dic,l))
        p.start()
        p_list.append(p)
    for i in p_list: i.join()
    print('主进程:',dic)

猜你喜欢

转载自www.cnblogs.com/zhangtengccie/p/10392478.html