Python之路,Day9, 进程、线程、协程篇
import threading
import time
from functools import wraps
from loguru import logger
def timer(func):
@wraps(func) # 修正 docstring
def wrap(*args, **kwargs):
st = time.time()
result = func(*args, **kwargs)
et = time.time()
duration = et - st
logger.warning(f'耗时{duration}秒')
return result
return wrap
num = 0
thread_list = []
lock = threading.Lock()
class 线程锁demo:
def holdon(self):
time.sleep(0.01)
return 1
def add(self):
global num
print(f'--get num: {num}')
time.sleep(1)
lock.acquire() # 加锁
num += self.holdon()
lock.release() # 释放锁
@timer
def run(self):
for i in range(100):
t = threading.Thread(target=self.add)
t.start()
thread_list.append(t)
for t in thread_list:
t.join()
print('===============')
print(f'final num: {num}')
if __name__ == "__main__":
app = 线程锁demo()
app.run()
运行结果:
--get num: 0
--get num: 0
...
...
--get num: 0
--get num: 0
--get num: 0
--get num: 0
===============
final num: 100
2021-02-12 17:18:57.702 | WARNING | __main__:wrap:16 - 耗时2.015472888946533秒
如果注释掉37和39行
运行结果:
--get num: 0
...
...
--get num: 0
===============
final num: 2
2021-02-12 17:20:16.185 | WARNING | __main__:wrap:16 - 耗时1.0232963562011719秒
网友评论