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

进程之间如何进行通信?

时间:2019-12-18 09:27:08      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:子进程   程序   代码   def   none   ==   队列   ict   功能   

队列:

# 生产者
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)

进程之间如何进行通信?

标签:子进程   程序   代码   def   none   ==   队列   ict   功能   

原文地址:https://www.cnblogs.com/Rivend/p/12058031.html

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