import threading
import time
# 什么是全局解释器锁GIL 线程锁
def run(n):
# 加一个数据锁
lock.acquire()
global num
# time.sleep(2) #sleep 不占用cpu
num += 1
# time.sleep(0.1) #所有正常加数据锁时,不要加sleep也不能进行量特别大数据
#这是是测试程序是否变成串行的,因为加数据锁后程序一定变成串行的
# 释放一个数据锁
lock.release()
# 但是在python3里面已经优化了自动加锁,所以我们这里是没有必要加锁的
# python并不是真正的多线程,只是不断的上下文切换,看起来是多线程
# 注意线程数跟机器cpu有关,循环创建线程
lock = threading.Lock()
mytime = time.time()
num = 0
tlist = []
for i in range(100):
t = threading.Thread(target=run,args=('t-%s'%i,))
t.start()
tlist.append(t)
for j in tlist:
j.join()
# time.sleep(3)
print('all thread has finished',threading.current_thread(),threading.active_count())
print('num:',num)
Python多线程005之全局解释性锁GIL
最新推荐文章于 2022-10-17 14:17:49 发布