zoukankan      html  css  js  c++  java
  • if __name__ == __'main'__: 判断讲解

    """
    王思聪作为消费者 要吃热狗
    生产者 负责做热狗
    问题:
    王思聪不清楚对方会生产多少热狗

    """
    from multiprocessing import Process,Queue,JoinableQueue
    import time,random

    # 生产者
    def make_hot_dog(q):
    for i in range(1,6):
    time.sleep(random.randint(1,3))
    print("33[46m生产者 生产了hot_dog%s33[0m" % i)
    q.put("hot_dog%s" % i)
    # 消费者
    def eat_hot_dog(q):
    while True:
    time.sleep(random.randint(1, 2))
    hot_dog = q.get()
    print("思聪吃了%s" % hot_dog)
    q.task_done()
    if __name__ == '__main__':#操作系统在创建子进程时 会把文件当做模块导出从头开始执行一遍当遇到if__name__ == '__main__'会判断,此时的__name__ 为模块文件名与main不相等所以不执行,
    从而避免了,操作系统不停地无线的循环开启子进程。
                    而且子进程只能在主进程中执行产生,需要几次创建几次,
    # 共享数据的队列
    q = JoinableQueue()
    # 生产者
    p1 = Process(target=make_hot_dog,args=(q,))#有了方法和数据(通过args=(q,)传参,只需要执行if __name__ =='__main__':上的函数方法就可以
    p2 = Process(target=make_hot_dog,args=(q,))
                                    #有了方法和数据(通过args=(q,)传参,只需要执行if __name__ =='__main__':上的函数方法就可以

    p1.start()
    p2.start()
    # 消费者
    c1 = Process(target=eat_hot_dog,args=(q,))
    c1.daemon = True
    c1.start()
    # print("完成了吗???")
    #先要确定生产者已经不会再生产了
    p1.join()
    p2.join()
    print("生产已经结束了...")
    #再确定队列中的所有数据都被处理完成
    q.join()
    print("思聪已经全部吃完了....")


    # c1.terminate()(终止消费者进程)
    #王思聪就不需要在吃了



  • 相关阅读:
    【PostgreSQL-9.6.3】触发器概述(普通触发器)
    【MySQL】二进制分发安装
    【MySQL】RPM包安装
    【PostgreSQL-9.6.3】分区表
    【PL/SQL】用星号拼出金字塔
    【PostgreSQL-9.6.3】临时表
    【PL/SQL】触发器示例:记录加薪
    【PL/SQL】九九乘法口诀表
    数据结构和算法
    类元编程
  • 原文地址:https://www.cnblogs.com/tangda/p/10491575.html
Copyright © 2011-2022 走看看