我们一直在讲多线程中的模块,想必大家也差不多可以进入我们的测试环节,也算是检验小伙伴们学了几天的成果。就以运算为例,我们都知道肯定是计算所需的时间越少越出色,那么多线程中的运算是否比其他的运算要快呢?这里需要小伙伴们跟着小编一起去探索,才能真切体会到运算的快乐,接下来直接进入正题:
多线程存在GIL(global interpret lock)。为了实现多线程功能,程序把线程锁住,然后锁住了之后,只有唯一一个线程运算。Python只能够让线程在同一时间运算一个东西。在不停切换,看起来是多线程的。但实际上不是。import threading
from queue import Queue
import copy
import time
def job(lists, q):
res = sum(lists)
q.put(res)
def multi_theading(lists):
q = Queue()
threads = []
for i in range(4):
t = threading.Thread(target=job, args=(copy.copy(lists), q),
name = 'T%i'%i)
t.start()
threads.append(t)
[t.join() for i in threads]
total = 0
for _ in range(4):
total += q.get()
print(total)
def normal(lists):
# 完全不用多线程
total = sum(lists)
print(total)
if __name__ == '__main__':
lists = list(range(1000000))
s_t = time.time()
normal(lists*4)
print('Normal : ', time.time() - s_t)
s_t = time.time()
multi_theading(lists)
print('multi_threading : ', time.time() - s_t)
运行结果1999998000000
Normal : 0.1705458164215088
1999998000000
multi_threading : 0.14860320091247559
不用多线程是0.1705秒;用了多线程仅仅是稍微快了一点。
有些小伙伴习惯性的认为,小编所讲的知识点肯定是最具有优势的,其实不是这样的哦~所有的结论需要经过实验才能得出结论。更多Python学习指路:PyThon学习网教学中心。