码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通讯的三种方式

时间:2018-08-19 01:02:49      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:nbsp   child   for   div   更改   manage   def   man   range   

# 进程间通讯
# 1、进程对列multiprocessing.Quere
import multiprocessing, time


def foo(q):
    time.sleep(1)
    print(son process, id(q))
    q.put(123)
    q.put(alex)


if __name__ == __main__:
    q = multiprocessing.Queue()
    print(main process, id(q))
    p = multiprocessing.Process(target=foo, args=(q,))
    p.start()

    print(q.get())
    print(q.get())

# 2、管道 pipe()
from multiprocessing import Process, Pipe


def f(conn):
    conn.send([12, {name: alex}, hello])
    response = conn.recv()
    print(response, response)
    conn.close()
    print(q_ID2:, id(conn))


if __name__ == __main__:
    parent_conn, child_conn = Pipe()  # 双向管道
    print(q_ID1:, id(child_conn))
    p = Process(target=f, args=(child_conn,))
    p.start()
    print(parent_conn.recv())
    parent_conn.send(儿子你好)
    p.join()

# 3、Managers 实现数据共享 (Queue和Pipe只是实现数据交互,没有实现数据共享,即一个进程去更改另一个进程的数据)
from multiprocessing import Process, Manager


def f(d, l, i):
    d[i] = 1  # {0: ‘1‘}
    d[2] = 2  # {0: ‘1‘, ‘2‘: 2}

    l.append(i)  # [0, 1, 2, 3, 4, 0]

    print(son process:, id(d), id(l))


if __name__ == __main__:
    with Manager() as manager:
        d = manager.dict()  # 创建Manager字典 {}
        l = manager.list(range(5))  # 创建Manager列表 [0, 1, 2, 3, 4]

        print(main process:, id(d), id(l))

        p_list = []
        for i in range(10):
            p = Process(target=f, args=(d, l, i))
            p.start()
            p_list.append(p)

        for res in p_list:
            res.join()

        print(d)
        print(l)

 

进程间通讯的三种方式

标签:nbsp   child   for   div   更改   manage   def   man   range   

原文地址:https://www.cnblogs.com/dangrui0725/p/9499310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!