• 多进程


    代码1  Queue   (消息)队列

    利用put/get 进行添加和消耗

    由于多get了1次 ,end无法打印出,主程序等待。

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    #   mail: infaaf@126.com
    import  time
    import os
    
    from multiprocessing import Process,Queue,Manager
    
    
    def f(q, i):
        q.put(i)
    
    
    def f2():
        pass
    
    
    if __name__ == '__main__':
    
        q = Queue()
        q.put('a')
    
        for i in range(3):
            p=Process(target=f,args=(q,i))
            p.start()
    
    
        print(q.get())
        print(q.get())
        print(q.get())
        print(q.get())
        print(q.get())
        print('end')

    程序2 共享数据之 Manage

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    #   mail: infaaf@126.com
    import  time
    import os
    
    from multiprocessing import Process,Queue,Manager
    
    
    def f(q, i):
        q.put(i)
    
    
    def f2(d,d2,l,i):
        d['a']='aa'
        d['b']='bb'
        d2['222']=222   # 不报错,但是主程序d2={}
        l.append('11')
    
    
    if __name__ == '__main__':
    
        with Manager() as manager:   # 以下,都要写在with段落后
            d=manager.dict()
            l=manager.list(range(2))  #先初始化2个,也可以不初始化
            d2={}
    
            p_list=[]
    
            for i in range(3):
                p=Process(target=f2,args=(d,d2,l,i))
                p.start()
                p_list.append(p)
    
            for p in p_list:
                p.join()
    
            print(d)
            print(l)
            print(d2)
            
            

    结果

    {'a': 'aa', 'b': 'bb'}
    [0, 1, '11', '11', '11']
    {}

    Process finished with exit code 0

    以上2个例子,子进程,都需要通过传递消息Q 或者M。

  • 相关阅读:
    python之路---类
    python之路---走台阶(递归)
    python之路---递归函数
    python之路---filter、map、lambda函数
    python之路---封装
    python07--抽象数据类型和python类(P34)
    python06--计算机内存结构与存储管理(P27)
    匹配算法大纲
    并查集及其优化
    Hash技术初涉
  • 原文地址:https://www.cnblogs.com/infaaf/p/9291631.html
Copyright © 2020-2023  润新知