进程之间如何进行通信?

Posted rivend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程之间如何进行通信?相关的知识,希望对你有一定的参考价值。

队列:

# 生产者
def producer(name, food, q):
    for i in range(20):
        time.sleep(random.random())

        f = "%s 制作了的第%s个%s" % (name, i, food)
        print(f)

        # 将数据放入队列中
        q.put(f)


# 消费者
def chibaozi(name, q):
    while 1:
        # 在队列中取值
        food = q.get()

        # 不能用字符形式格式,需要用is关键字才能和none配合
        if food is None:
            break
        print("%s 消费了 %s" % (name, food))


if __name__ == __main__:
    # 创建一个队列
    q = Queue()

    # 生产者
    qq = Process(target=producer, args=(Mark, 包子, q))
    qq1 = Process(target=producer, args=(Riven, 馒头, q))

    # 消费之
    qq2 = Process(target=chibaozi, args=(黄埔, q))
    qq3 = Process(target=chibaozi, args=(佘义, q))

    # 统一启动子进程
    qq.start()
    qq1.start()
    qq2.start()
    qq3.start()

    # 先执行子程序,后执行主程序代码
    qq.join()
    qq1.join()

    # 放入None 让消费者跳出循环
    q.put(None)
    q.put(None)

 

管道:

from multiprocessing import Manager
from multiprocessing import Process
from multiprocessing import Lock

def main(dic,lock):

    # 加锁
    lock.acquire()
    dic[count] -= 1
    print(子进程, dic)
    lock.release()


if __name__ == "__main__":
    # 虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此
    m = Manager()

    lock = Lock()

    # 放入一个字典
    dic = m.dict({"count": 100})


    for i in range(20):
        p = Process(target=main, args=(dic,lock))
        p.start()


        p.join()
    print(测试, dic)

以上是关于进程之间如何进行通信?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用接口在片段和活动之间进行通信?

在片段和活动之间进行通信 - 最佳实践

C - 在顶层和底层进程之间进行通信

如何使用标准输入和标准输出在 C# 和 ruby​​ 进程之间进行通信

进程之间如何进行通信?

在不同计算机上的进程之间进行通信