• 进程通信和数据共享两种方式


    from multiprocessing import Process,Queue
    import time
    import random
    
    '''
    
    进程间两种方式传递数据
    项目方式:生产包子和吃包子
    进程的队列和线程的队列不一样
    线程队列queue.Queue() --------- 进程队列multiprocessing.Queue()
    '''
    def aoo(que):
        while True:
            #开始生产包子并放置到包子队列中
            rr = random.randint(1,100)
            que.put(rr)
            print("现在生产了%s号包子"%rr)
            time.sleep(1)
    
    def boo(que):
        while True:
            #开始再包子队列中拿包子吃
            qg = que.get()
            print("现在吃了%s号包子"%qg)
    
    if __name__ == "__main__":
        que = Queue()  #创建进程队列
        pros = []
        for i in range(3):    # 创建三个进程生产包子
            pro1 = Process(target=aoo,args=(que,))
            pros.append(pro1)         #把que传递到函数方法中实现共享队列
            pro1.start()
    
        pro2 = Process(target=boo,args=(que,))
        pros.append(pro2)
        pro2.start()    #创建一个进程吃包子
    
        for pr in pros:    #所有进程执行完后再执行
            pr.join()
        print("-------我是主Process进程")
        
         
    from multiprocessing import Pipe,Process
    
    def aoo(conn):
        conn.send("ddd")
        print(conn.recv())
    
    if __name__ == "__main__":
        parent_conn,child_conn = Pipe()  #创建管道便于信息互通
        pro = Process(target=aoo,args=(child_conn,))   #创建进程,并将子进程传递给函数conn
        pro.start()
        print(parent_conn.recv())
        parent_conn.send("jjjjj")
        pro.join()

     Manager

    from multiprocessing import Manager,Pipe,Process
    
    def aoo(dicts,lists,num):
        dicts[0] = 1
        dicts[8]="a"
        lists.append(num)
    
    
    if __name__ == "__main__":
        #创建Manager  实现数据共享
        manager = Manager()
        dicts = manager.dict()
        lists = manager.list()
    
        #创建三个进程
        pros = []
        for num in range(5):
            pro = Process(target=aoo,args=(dicts,lists,num))
            pros.append(pro)
            pro.start()
    
        for ie in pros:
            ie.join()
    
        print(dicts)
        print(lists)
  • 相关阅读:
    hdu 5053 the Sum of Cube
    [LeetCode] Word Pattern
    [LeetCode] Minimum Depth of Binary Tree
    [C++] std::vector
    [LeetCode] Count Binary Substrings
    [LeetCode] Degree of an Array
    [LeetCode] String to Integer (atoi)
    [LintCode] 比较字符串
    [LeetCode] Valid Parentheses
    [LeetCode] Perfect Number
  • 原文地址:https://www.cnblogs.com/TKOPython/p/12461644.html
Copyright © 2020-2023  润新知