import time
from threading import Semaphore,Thread
deffunc(sem,a,b):
sem.acquire()#获取锁
time.sleep(2)print(a+b)
sem.release()#释放锁
sem = Semaphore(4)#同一时间只能有4个线程对象获取锁,其他线程释放锁后才有获取被释放的锁for i inrange(10):#利用循环开启10个线程
t = Thread(target=func,args=(sem,i,i+5))
t.start()
from threading import Condition
from threading import Thread
import time
deffunc(con,i):
con.acquire()
con.wait()# 等待print('在第%s个循环里'%i)
con.release()
con = Condition()#创建条件对象for i inrange(10):
Thread(target=func,args =(con,i)).start()#启动10个子线程whileTrue:
con.acquire()
con.notify(2)# 每次唤醒2个线程
con.release()
time.sleep(1)#休眠1秒#在子线程中通过条件对象让线程休眠#在主线程中每次唤醒2个线程对象然后休眠1秒
定时器
from threading import Timer
from threading import Timer
from nt import getpid
import threading
import os
deffun():print('定时器',getpid(),os.getpid(),threading.get_ident())#获取进程id与当前子线程id——定时器 5128 5128 4456if __name__ =='__main__':
t = Timer(2,fun).start()#2秒钟后开启一个子线程调用fun方法print(getpid(),os.getpid(),threading.get_ident())#获取进程id与当前主线程id——5128 5128 4112