zoukankan      html  css  js  c++  java
  • 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)
            
  • 相关阅读:
    深度通道编程模型
    缓冲区溢出实验实验楼
    团队作业(一)
    信安导论学习阶段性总结
    Python总结
    mysql下载及安装
    初识python
    MobileMenuScene来点动画效果
    移动菜单页面PlayerInput
    渲染和填充MobileMenuListItem
  • 原文地址:https://www.cnblogs.com/gaizhongfeng/p/8036338.html
Copyright © 2011-2022 走看看