为什么这个程序在使用多个线程时运行速度不快?

时间:2017-04-25 22:49:37

标签: python multithreading

start = time.time()
for i in range (260):
        if i==259:
            print ("a done\n")
            break
for o in range (260):
        if o==259:
            print ("b done\n")
            break 
end = time.time() 
print (end-start) 

此代码花费的时间几乎为“0.007”并且它首先读取(I)循环然后当它完成时开始读取(O)循环

我的问题是这段代码:

start = time.time()
def a():
    for i in range (260):
        if i==259:
            print (" a done \n")
            break
def b():
    for o in range (260):
        if o==259:
            print (" b done \n")
            break
th1=Thread(target=a)
th2=Thread(target=b)
th1.start()
th2.start()
th1.join()
th2.join()
end = time.time() 
print (end-start)

即使这个代码在同一时间读取(I)循环和(O)循环,但它仍然几乎“0.008”

我认为第二个代码应该占用第一个代码的一半时间,但我不明白为什么它与第一个代码几乎相同的时间?

1 个答案:

答案 0 :(得分:2)

这是由于global interpreter lock (GIL)。 I / O和C扩展在GIL之外,但纯Python工作的线程并不实际并行工作。

如果您确实要并行执行Python代码,请参阅multiprocessing。它有一个类似于线程的API(以及新功能)。

from multiprocessing import Process
p1 = Process(target=a)
p2 = Process(target=b)
p1.start()
p2.start()
p1.join()
p2.join()