标签:Count __ python 代码 countdown time GIL pool
近期看了一些关于GIL的一些内容,敲一下代码看看效果。
# coding:utf-8 # GIL(Global Interpreter Lock):他只允许任何时刻只有一个线程处于执行状态,即使是在具有多个CPU内核的多线程架构中。 # 为什么没有删除GIL,因为现在的python已经严重依赖GIL提供的解决方案。如果删除会破坏现有的C扩展。(free threading 就是删除的案例,他会导致单线程任务速度降低40%。) # 释放GIL:以前版本是采用计数策略删除,如果该线程计数为0,则删除。现在采用固定时间间隔,到了时间点就删除。 import time from threading import Thread from multiprocessing import Pool Count = 50000000 def countdown(n): while n>0: n-=1 if __name__ == "__main__": # 不采用多进程和多线程 start1 = time.time() countdown(Count) end1 = time.time() print("2:", end1 - start1) # 2.538 # 采用多线程 # t1 = Thread(target=countdown, args=(Count // 2,)) # t2 = Thread(target=countdown, args=(Count // 2,)) # start = time.time() # t1.start() # t2.start() # t1.join() # 这个方法主要是为了阻塞当前线程 # t2.join() # 至于为什么,我觉得可能是为了防止同一时刻有多个线程访问资源。 # end = time.time() # print("1:", end - start) # 2.717 # 采用多进程 # pool = Pool(processes=2) # start2 = time.time() # r1 = pool.apply_async(countdown, [Count//2]) # r2 = pool.apply_async(countdown, [Count//2]) # pool.close() # pool.join() # end2 = time.time() # print("3:",end2-start2) # 1.617
结果发现,采用多进程的确会好点。
标签:Count,__,python,代码,countdown,time,GIL,pool 来源: https://www.cnblogs.com/peixu/p/16339729.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。