守护线程
守护线程会在主线程结束就立即结偶完成束,即使任务没有完成
主线程会等待所有子线程全部完成最后结束
结论 :守护线程会在所有非守护进程结束后结束
from threading import Thread,current_thread
import time
def task1():
print("%s正在运行...."%current_thread().name)
time.sleep(3)
print("%s over...."%current_thread().name)
def task2():
print("%s 正在运行..."%current_thread().name)
time.sleep(10)
print("over...."%current_thread().name)
t1 = Thread(target = task1)
t2 = Thread(target = task2)
t1.daemon = True #守护线程必须放在start前面
t1.start()
t2.start()
print("over")
生产者消费者模型
例子:
王思聪作为消费者 要吃热狗
生产者负责做热狗
问题是不知道:王思聪不清楚对方会生产多少热狗
from multiprocessing import Process Queue,JoinableQueue
import time,random
def make_hot_dog():
for i in range(1,6):
time.sleep(random.randint(1,3))
print('生产者 生产了hot_dog%s ' %i)
q.put("hot_dog%s"%i)
def eat_hot_dog():
while True:
time.sleep(random.randint(1,3))
hot_dog = q.get()
print("思聪吃了%s" %hot_dog)
q.task_done()
if __name__ =="__main__":
q = JoinableQueue()
p1 = Process(target = mak_hot_dog,args = (q,))
p2 = Process(target = mak_hot_dog,args = (q,)
p1.start()
p2.start()
#消费者
c1 = Process(target = eat_hot_dog,args = (q,)
c1.daemon = True
c1.start()
#要确定生产者不会再生产了
p1.join()
p2.join()
print("生产已经结束了“)
#再确定队列中的所有数据都被处理完成
q.join()
print("思聪已经全部吃完了“)