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语言调用汇编函数 实现超过32位数的加法
    【Qt学习笔记】13_富文本及打印页面
    Java初级回顾
    Java中FileInputStream和FileOutputStream类实现文件夹及文件的复制粘贴
    Java中File类如何扫描磁盘所有文件包括子目录及子目录文件
    学习笔记之循环链表
    练习 hdu 5523 Game
    学习笔记之集合ArrayList(1)和迭代器
    学习笔记之工厂方法模式
    学习笔记之基本数据类型-包装类-String之间的转换
  • 原文地址:https://www.cnblogs.com/ss-py/p/8665302.html
Copyright © 2011-2022 走看看