线程

守护进程

守护线程

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()

posted on 2020-05-14 22:15  bingzhang  阅读(126)  评论(0)    收藏  举报

导航