• python 进程间的数据交互


    Queue 的方式:

    # -*- coding: utf-8 -*-
    
    from multiprocessing import Queue,Process
    
    '''
    将queue 通过参数的形式进行传递,这个queue 实际是复制一份到子进程中,当子进程的queue改变后
    会有一个中间方将queue进行序列化 , 在反序列化到父进程的queue中
    
    如果要使用线程的queue ,就会报一个pickle _thread lock 的异常,就是因为线程的queue 不能被序列化导致的
    '''
    
    def f(q1):
        q1.put('aaa')
    
    if __name__=='__main__':
        q = Queue()
        p = Process(target = f,args=(q,))
        p.start()
        print(q.get())
        p.join()

    管道方式 :

    # -*- coding: utf-8 -*-
    
    from multiprocessing import Process,Pipe
    
    def run(conn):
        conn.send('aaa')
        conn.close()
    
    
    if __name__=='__main__':
        parent_conn,child_conn = Pipe()
        p = Process(target=run,args=(child_conn,))
        p.start()
        print(parent_conn.recv())
        p.join()

    manager 方式:

    # -*- coding: utf-8 -*-
    '''
    用 manager.dict() 和manager.list()生成的 列表和字典可以实现共享
    
    一般进程间的共享使用这种方式
    '''
    from multiprocessing import Process,Manager
    
    def f(d,l):
        d[1]='1'
        d['2']=2
        d[0.25]=None
        l.append(1)
        print(l)
    
    if __name__=='__main__':
        with Manager() as manager:
            #生成一个字典 , 可在多个进程间传递
            d = manager.dict()
            
            l = manager.list(range(5))
            p_list=[]
            for i in range(10):
                p = Process(target=f,args=(d,l))
                p.start()
                p_list.append(p)
            
            for res in p_list:
                res.join()
                
            print(d)
            print(l)
            
  • 相关阅读:
    框架比较
    框架整理
    bootstrap-table中get请求携带的参数
    0514任务思路
    两台电脑对码云上面的项目进行迭代
    项目问题
    vue 中发送axios请求,解决跨域问题(没有config文件)
    正则表达式(未完待续)
    【转载】深入理解Linux文件系统
    浅谈IO优化
  • 原文地址:https://www.cnblogs.com/gaizhongfeng/p/8036338.html
Copyright © 2020-2023  润新知