zoukankan      html  css  js  c++  java
  • 队列

    (1)简单的队列:

    import queue   #线程queue
    q = queue.Queue()
    q.put('a')
    q.put('b')
    q.put('c')
    q.put('d')
    q.put('e')
    print(q.qsize( ))
    print(q.get())
    print(q.qsize( ))

    (2)多个进程(主进程和子进程)之间相互传递数据,但是不共享数据:

    from multiprocessing import Queue,Process
    '''多个进程(主进程和子进程)相互传递数据,但是不共享数据'''
    def f(qq):
        qq.put('你好')
    if __name__ == '__main__':
        q = Queue()
        p = Process(target=f,args=(q,))    #起一个子进程
        p.start()
        print('>>',q.get())
        p.join()

    (3)

    管道的方式   多个进程(主进程和子进程)之间相互传递数据,但是不共享数据:
    from multiprocessing import Process,Pipe #(Pipe() 管道)
    def child(conn):
        conn.send('hello world!')
        conn.send('hello world too!')
        print('儿子收到父亲来电:',conn.recv())
        conn.close()
    if __name__ == '__main__':
        father_conn,child_conn = Pipe()  #管道有两端,一端父亲一端儿子
        father_conn.send('儿砸')
        p = Process(target=child,args=(child_conn,))  #把儿子传给子进程,父亲是主进程
        p.start()
        print('父亲收到儿子来电:',father_conn.recv())
        print('父亲收到儿子来电:',father_conn.recv())
    
        p.join()


    (4)多个进程(主进程和子进程)之间真正的数据共享:
    from multiprocessing import Process,Manager
    import os
    def f(d,l):
        d[os.getpid()] = os.getpid()  #将进程号当作 key 和value传到字典里边
        l.append(os.getppid())
        print(l)
    if __name__ == '__main__':
        with Manager() as manager:
            d  = manager.dict()            #生成一个字典,可在多个进程之间贡献
            l = manager.list(range(3))     #生成一个列表,事先存有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)

    (5)进程锁 用法和线程锁基本一样:
    from multiprocessing import Process,Lock
    def f(l,i):
        l.acquire()
        print('hello world',i)
        l.release()
    if __name__ == '__main__':
        l = Lock()   #进程锁需要将锁传进去
        for i in range(10):
            p = Process(target=f,args=(l,i,))
            p.start()



  • 相关阅读:
    总结C#获取当前路径的7种方法
    Cognex925B的使用方法
    值类型不允许赋值为Null
    浅谈Task的用法
    C#中的变量祥解
    C#中属性的解析
    浅谈简单工厂模式
    浅谈Invoke 和 BegionInvoke的用法
    c#小灶——9.算术运算符
    c#小灶——8.自动类型转换和强制类型转换
  • 原文地址:https://www.cnblogs.com/ss-py/p/8665302.html
Copyright © 2011-2022 走看看