zoukankan      html  css  js  c++  java
  • 进程队列(Queue),Pipe(管道), Manager 进行进程之间的数据传递和传输

    进程Queue,实现进程传输的队列 

    1.Queue

    from multiprocessing import Process, Queue


    def f(q):
    q.put('1')
    q.put('2')


    if __name__ == '__main__':
    q = Queue() #主进程
    p = Process(target=f, args=(q,)) #把队列q作为参数传入f中 p是子进程
    p.start()

    print(q.get())


    Pipe 作为一个管道, Pipe()生成一个conn_parent, conn_childen,把其中一个给其他进程,就可以实现两个进程之间的传输
    2.Pipe

    from multiprocessing import Pipe, Process


    def f(conn,):
    conn.send('name')
    conn.send('alex')
    data = conn.recv()
    print(data)


    if __name__ == '__main__':
    conn_parent, conn_childen = Pipe()
    p = Process(target=f, args=(conn_childen, ))
    p.start()
    conn_parent.recv()
    conn_parent.recv()
    conn_parent.send('alex')

    Manager 生成进程列表, 或者进程字典, 将这个进程字典或列表拷贝一份传递给其他进程。

    3.Manager

    from multiprocessing import Process, Manager
    import os



    def f(d, l):
    d[os.getpid()] = os.getpid()

    l.append(os.getpid())
    print(l)

    if __name__ == '__main__':
    with Manager() as manager:
    d = manager.dict()
    l = manager.list(range(1, 10))
    p_list = []
    for i in range(10):
    p = Process(target=f, args=(d, l))
    p.start()
    p_list.append(p)

    for t in p_list:
    t.join()

    print(d)
    print(l)






  • 相关阅读:
    难得之货,令人行妨
    Oracle死锁
    log4j杂记
    Oracle9或11使用了Oracle10的驱动引起的时间丢失
    程序员要重视过劳
    oracle提供的有用函数(待续)
    Mysql扩展之replication概述
    @autowired与@qualifer的使用区别备忘
    Oracle中的in参数的个数限制
    java版正则式提取替换示例
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9164506.html
Copyright © 2011-2022 走看看