Python之多线程学习【3】:GIL影响线程的效率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_36499794/article/details/102766226

一. 解析

      其实很 简单,假如我现在有三个线程,它要对一些数据进行处理,它的处理时间其实不一定比平常时候高很多。就是因为GIL的存在。其实在每一个线程运算的过程中,其他的线程是无法运算的,是被锁住的,只有线程1运算结束,进入IO了,其他的线程才可以开始运算,所以开启多线程做运算节约的其实是IO的时间。但是多线程如果用于聊天系统的发消息,收消息,就很方便。

二. 代码

import threading
from queue import Queue
import copy
import time

def job(l, q):
    res = sum(l)
    q.put(res)

def multithreading(l):
    q = Queue()
    threads = []
    for i in range(4):
        t = threading.Thread(target=job, args=(copy.copy(l), q), name='T%i' % i)
        t.start()
        threads.append(t)
    [t.join() for t in threads]
    total = 0
    for _ in range(4):
        total += q.get()
    print(total)

def normal(l):
    total = sum(l)
    print(total)

if __name__ == '__main__':
    l = list(range(1000000))
    s_t = time.time()
    normal(l*4)
    print('normal: ',time.time()-s_t)
    s_t = time.time()
    multithreading(l)
    print('multithreading: ', time.time()-s_t)

三. 运行结果

猜你喜欢

转载自blog.csdn.net/qq_36499794/article/details/102766226