守护线程--day34

"""
----守护线程----

守护线程会在所有非守护线程结束后结束
三个线程 分贝 皇帝 太子 和皇后
如果把皇后设置为守护线程 那么皇后线程会在 太子和皇帝都死亡后死亡
当所有非线程结束后 守护线程也跟着结束了


进程 守护进程会在被守护进程死亡跟着死亡
同一个进程 可以有多个守护线程
"""
from threading import Thread
import time

def task():
    print("子线程运行。。。")
    time.sleep(1)
    print("子线程结束。。。")

t = Thread(target=task)
t.setDaemon(True)
t.start()

print("over")  # 设置为守护进程后主进程结束子线程也会结束

"""
生产者与消费者模型


吃热狗 与 做热狗
"""
from multiprocessing import Process,JoinableQueue
def eat_hotdog(name,q):
    while True:
        res = q.get()
        print("%s吃了%s" % (name,res))
        time.sleep(random.randint(1,2))
        q.task_done()  # 记录已经被处理的数据的数量

def make_hotdog(name,q):
    for i in range(1,6):
        time.sleep(random.randint(1, 2))
        print("%s生产了第%s个热狗" % (name,i))
        res = "%s的%s个热狗" % (name,i)
        q.put(res)
    # q.put(None)

if __name__ == '__main__':
    q = JoinableQueue()
    #生产者1
    c1 = Process(target=make_hotdog,args=("万达热狗店",q))
    c1.start()

    #生产者2
    c2 = Process(target=make_hotdog, args=("老男孩热狗店", q))
    c2.start()

    # 消费者
    p2 = Process(target=eat_hotdog,args=("思聪",q))
    p2.start()

    # 首先保证生产者全部产完成
    c1.join()
    c2.join()

    # 保证队列中的数据全部被处理了
    q.join()  # 明确生产方已经不会再生成数据了

 

posted @ 2019-01-02 15:54  WenChen-0o0  阅读(128)  评论(0编辑  收藏  举报