import time
from threading import Thread
deffunc1():whileTrue:
print('*'*10)
time.sleep(1)
deffunc2():
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 multiprocessing import Process# def func():# time.sleep(5)## if __name__ == '__main__':# Process(target=func).start()
3,线程锁
import time
from threading import Lock,Thread
# Lock 互斥锁# def func(lock):# global n# lock.acquire()# temp = n# time.sleep(0.2)# n = temp - 1# lock.release()## n = 10# t_lst = []# lock = Lock()# for i in range(10):# t = Thread(target=func,args=(lock,))# t.start()# t_lst.append(t)# for t in t_lst: t.join()# print(n)# 科学家吃面# noodle_lock = Lock()# fork_lock = Lock()# def eat1(name):# noodle_lock.acquire()# print('%s拿到面条啦'%name)# fork_lock.acquire()# print('%s拿到叉子了'%name)# print('%s吃面'%name)# fork_lock.release()# noodle_lock.release()## def eat2(name):# fork_lock.acquire()# print('%s拿到叉子了'%name)# time.sleep(1)# noodle_lock.acquire()# print('%s拿到面条啦'%name)# print('%s吃面'%name)# noodle_lock.release()# fork_lock.release()## Thread(target=eat1,args=('alex',)).start()# Thread(target=eat2,args=('Egon',)).start()# Thread(target=eat1,args=('bossjin',)).start()# Thread(target=eat2,args=('nezha',)).start()
from threading import RLock # 递归锁
fork_lock = noodle_lock = RLock() # 一个钥匙串上的两把钥匙
def eat1(name):
noodle_lock.acquire() # 一把钥匙
print('%s拿到面条啦'%name)
fork_lock.acquire()
print('%s拿到叉子了'%name)
print('%s吃面'%name)
fork_lock.release()
noodle_lock.release()
def eat2(name):
fork_lock.acquire()
print('%s拿到叉子了'%name)
time.sleep(1)
noodle_lock.acquire()
print('%s拿到面条啦'%name)
print('%s吃面'%name)
noodle_lock.release()
fork_lock.release()
Thread(target=eat1,args=('alex',)).start()
Thread(target=eat2,args=('Egon',)).start()
Thread(target=eat1,args=('bossjin',)).start()
Thread(target=eat2,args=('nezha',)).start()
4,信号量
import time
from threading import Semaphore,Thread
deffunc(sem,a,b):
sem.acquire()
time.sleep(1)
print(a+b)
sem.release()
sem = Semaphore(4)
for i in range(10):
t = Thread(target=func,args=(sem,i,i+5))
t.start()
import time
from concurrent.futures import ThreadPoolExecutor
deffunc(n):
time.sleep(2)
print(n)
return n*n
defcall_back(m):
print('结果是 %s'%m.result())
tpool = ThreadPoolExecutor(max_workers=5) # 默认 不要超过cpu个数*5for i in range(20):
tpool.submit(func,i).add_done_callback(call_back)
# tpool.map(func,range(20)) # 拿不到返回值# t_lst = []# for i in range(20):# t = tpool.submit(func,i)# t_lst.append(t)# tpool.shutdown() # close+join ## print('主线程')# for t in t_lst:print('***',t.result())# ftp# 并发编程