多个线程操作同一个数据的时候,就得加锁,python3里自动加上锁了
import threading
lock = threading.Lock() # 申请一把锁
num = 0
def add():
global num
# lock.acquire() # 加锁
# # num += 1
# # lock.release() # 解锁,如果不解会产生死锁
with lock: # 简写,with可以加锁,也可以解锁
num += 1
for i in range(20):
t = threading.Thread(target=add)
t.start()
while threading.activeCount() != 1:
pass
print(num)
守护线程的意思是,主线程死掉了(执行完了),那么不管你子线程有没有运行完,都一起死(结束)
import time
import threading
def test():
time.sleep(2)
print('哈哈哈')
for i in range(5):
t = threading.Thread(target=test)
t.setDaemon(True) # 设置子线程为守护线程,默认是False
t.start()
print('over')
注释掉t.setDaemon(True),先打印over,2秒后打印出5行哈哈哈,如果不注释守护线程,主线程执行结束了,只会打印over