Python0226总结
1.join daemon
join:挂起主线程,待当前线程结束之后,再继续执行挂起主线程(可以指定挂起时间)
daemon:设置守护线程
2.可重入锁(递归锁)Rlock
3.信号量
4.定时器
5.事件Event
6.线程队列
#1.join daemon
import threading,time
def run():
for i in range(100):
time.sleep(0.1)
print('子线程结束')
t1 = threading.Thread()
t1.setDaemon(True)
t1.start()
t1.join(timeout=5)
print('主线程结束')
#哲学家就餐(可重复锁)
import threading,time
rlock1 = threading.Lock()
rlock2 = threading.Lock()
rlock3 = threading.Lock()
rlock4 = threading.Lock()
rlock5 = threading.Lock()
class ZheXueJia():
def __init__(self,left,right):
self.left = left
self.right = right
z1 = ZheXueJia(rlock5,rlock1)
z2 = ZheXueJia(rlock1,rlock2)
z3 = ZheXueJia(rlock2,rlock3)
z4 = ZheXueJia(rlock3,rlock4)
z5 = ZheXueJia(rlock4,rlock5)
def run(z,name):
f = z.left.acquire()
if f:
print(name,'获取左筷子')
ff = z.right.acquire()
if ff:
print(name,'获取右筷子')
print('哲学家开始就餐',name)
time.sleep(1)
z.right.release()
z.left.release()
t1 = threading.Thread(target=run, args=(z1,'z1'))
t2 = threading.Thread(target=run, args=(z2,'z2'))
t3 = threading.Thread(target=run, args=(z3,'z3'))
t4 = threading.Thread(target=run, args=(z4,'z4'))
t5 = threading.Thread(target=run, args=(z5,'z5'))
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
#信号量
import threading,time
s = threading.Semaphore(3)
def run(name):
s.acquire()
print(name,'开始执行')
time.sleep(1)
print(name, '结束执行')
s.release()
stat_time = time.time()
t1 = threading.Thread(target=run,args=('t1',))
t2 = threading.Thread(target=run,args=('t2',))
t3 = threading.Thread(target=run,args=('t3',))
t4 = threading.Thread(target=run,args=('t4',))
t5 = threading.Thread(target=run,args=('t5',))
t6 = threading.Thread(target=run,args=('t6',))
t7 = threading.Thread(target=run,args=('t7',))
t8 = threading.Thread(target=run,args=('t8',))
t9 = threading.Thread(target=run,args=('t9',))
t10 = threading.Thread(target=run,args=('t10',))
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
t6.start()
t7.start()
t8.start()
t9.start()
t10.start()
t1.join()
t2.join()
t3.join()
t4.join()
t5.join()
t6.join()
t7.join()
t8.join()
t9.join()
t10.join()
end_time = time.time()
print(end_time-stat_time)
#定时
import threading
def deal_task(n):
print('%s 我被执行了' % n)
t = threading.Thread(3,deal_task,args=(10,))
t.start()
#EVENT
import threading,time
e = threading.Event()
def hld():
print('现在是红灯')
time.sleep(5)
e.set()
print('现在是绿灯')
def car_run(name):
print(name,'迎面驶来')
e.wait()
print(name,'继续前行')
for i in range(10):
t = threading.Thread(target=car_run,args=(i,))
t.start()
h = threading.Thread(target=hld,)
h.start()
'''
#线程队列
import queue
q = queue.Queue()
q.put('2')
q.put(1)
q.put({'a': 1})
print(q.get())
print(q.get())
print(q.get())
'''
'''
import queue
q = queue.LifoQueue()
q.put(1)
q.put('2')
q.put({'a': 1})
print(q.get())
print(q.get())
print(q.get())
'''
'''
import queue
q = queue.PriorityQueue()
q.put((10, 'Q'))
q.put((30, 'Z'))
q.put((20, 'A'))
print(q.get())
print(q.get())
print(q.get())
'''
class A():
def __init__(self,a):
self.a = a
def __hash__(self):
if self.a=="a":
return 10
else:
return 6
a = A("a")
b = A("b")
print(hash(a))
print(hash(b))
import queue
q = queue.PriorityQueue()
q.put(hash(a))
q.put(hash(b))
print(q.get())
print(q.get())