线程
守护进程
守护线程
import time
from threading import Thread
def func1():
while True:
print(666)
time.sleep(10)
def func2():
print('in func2')
time.sleep(5)
t = Thread(target=func1,)
t.daemon=True #主线程结束 守护线程随之结束
t.start()
#主进程会等待子线程结束
t2=Thread(target=func2,)
t2.start()
t2.join()
print('主线程')
#守护线程会在主线程结束之后等待子线程的结束
#守护进程会在主进程代码的执行结束而结束
死锁问题
import time
from threading import Lock,Thread
def func(n):
global n
lock.acquire()
temp = n
time.sleep(0.2)
n=temp -1
lock.release()
n=10
l_lst=[]
lock = Lock() #互斥锁
for i in range(10):
t=thread(target=func,arg=(lock,))
t.start()
t_lst.append(t)
for t in t_list:t.join()
print(n)
科学家吃面
from threading import RLock #递归锁 ---解决死锁
fork_lock = noodle_lock = RLock()
def eat1(name):
noodle_lock.acquire()
print('%s拿到面条了'%name)
frok_lock.acquire()
print('%s拿到叉了'%name)
print('%s吃面'%name)
frok_lock.release()
noodle_lock.release()
def eat2(name):
frok_lock.acquire()
print('%s拿到叉了'%name)
time.sleep(1)
noodle_lock.acquire()
print('%s拿到面条了'%name)
print('%s吃面'%name)
noodle_lock.release()
frok_lock.release()
Thread(target=eat1,args=('alex1',)).start()
Thread(target=eat2,args=('alex2',)).start()
Thread(target=eat1,args=('alex3',)).start()
Thread(target=eat2,args=('alex4',)).start()
浙公网安备 33010602011771号