线程中的条件和定时器

时间:2022-12-22 00:09:10

  1.线程中的条件

# 条件
    # acquire release
    # wait
    # notify
    # 一个条件被创建之初,类似默认有一个False状态,False状态会影响wait,使wait一直处于等待状态
    # notify(int数据类型). 造钥匙,当条件对象notify了,条件对象的wait就会解除阻塞,notify传递的参数是几,条件对象的wait就会解除几次阻塞

import time
from threading import Condition # 导入线程条件模块
from threading import Thread


def func(con, i):
    con.acquire()   # 拿锁
    print('线程%s' % i)
    con.wait()  #   创建的10个线程都会阻塞在这,等到notify(num)造钥匙后,就会有num个线程解除阻塞在这里,con.release num次后,con条件又被阻塞在这里,钥匙不会归还
    print('第%s个' % i)
    con.release()

if __name__ == '__main__':
    con = Condition()   # 创建一个线程条件
    for i in range(10):
        t = Thread(target=func, args=(con, i)).start()

    while 1:
        num = int(input('>>>'))
        con.acquire()
        con.notify(num) # 条件调用notify造num把钥匙,有num把
        con.release()

  2.线程中的定时器

# 定时时间到后触发的线程

import time
from threading import Timer

def func():
    print('被执行了')

t = Timer(2, func)  # 创建一个定时器,绑定的线程是func, start后2S后只会执行一次
t.start()

print('haha')