设置守护进程

1.守护进程
守护线程在程序关闭时会突然停止

daemon=True
t = threading.Thread(target=do2, daemon=True)
或者
t = threading.Thread(target=do2)
t.setDaemon(True)

2.join阻塞
如果为线程实例添加t.setDaemon(True)守护进程之后,则主线程执行完成后,会立即退出,而不关注子进程是否执行ok!
那么join恰恰相反,当join出现时,会阻塞主进程,直到join的进程执行完,才能开始后续进程。
来看一个例子,a b c三人合租,a买了一台电视,但其他人想看电视的条件是a学习完了才能看,

import threading
import time
from atexit import register

def study(name, hours):
    print("{}今晚学习{}小时".format(name, hours))
    time.sleep(hours)
    print("{}学完了...".format(name))

def watch_tv():
    print("终于能打开电视了...")
    time.sleep(2)

@register
def _atexit():
    print('看完睡觉,关灯...')

print('c今天不学习...')
print('电视是a买的,a没学完习,你们都不能看')
a = threading.Thread(target=study, args=('a', 5,))
a.start()

b = threading.Thread(target=study, args=('b', 3))
b.start()
# 关注此处join点
a.join()

c = threading.Thread(target=watch_tv)
c.start()
print('啤酒炸鸡走起来!')

3.event事件

def do(event, name):
    print('{}号车主就位'.format(name))
    event.wait()  # 所有线程执行都这里都在等待

event_obj = threading.Event()
for i in range(1, 5):
    t = threading.Thread(target=do, args=(event_obj, i))
    t.start()
    time.sleep(0.1)

print("倒计时")
for i in range(3, 0, -1):
    print(i)
    time.sleep(1)

event_obj.set()
print('出发')

4.condition条件

import threading
import time

def seeker(cond, name):
    time.sleep(2)
    cond.acquire()
    print('%s :我已经把眼睛蒙上了!' % name)
    cond.notify()
    cond.wait()
    for i in range(2):
        print('%s is finding!!!' % name)
        time.sleep(1)
    cond.notify()
    cond.release()
    print('%s :哈哈,我赢了!' % name)

def hider(cond, name):
    cond.acquire()
    cond.wait()
    for i in range(2):
        print('%s is hiding!!!' % name)
        time.sleep(1)
    print('%s :我已经藏好了,你快来找我吧!' % name)
    cond.notify()
    cond.wait()
    cond.release()
    print('%s :被你找到了,唉~^~!' % name)

cond = threading.Condition()
seeker = threading.Thread(target=seeker, args=(cond, 'seeker'))
hider = threading.Thread(target=hider, args=(cond, 'hider'))
seeker.start()
hider.start()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值