当前位置 : 主页 > 手机开发 > ROM >

if __name__ == __'main'__: 判断讲解

来源:互联网 收集:自由互联 发布时间:2021-06-10
""" 王思聪作为消费者 要吃热狗 生产者 负责做热狗 问题: 王思聪不清楚对方会生产多少热狗 """ from multiprocessing import Process,Queue,JoinableQueue import time,random # 生产者 def make_hot_dog(q): for i
"""
王思聪作为消费者 要吃热狗
生产者 负责做热狗
问题:
王思聪不清楚对方会生产多少热狗

"""
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("\033[46m生产者 生产了hot_dog%s\033[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()(终止消费者进程)    #王思聪就不需要在吃了
网友评论