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”
我认为第二个代码应该占用第一个代码的一半时间,但我不明白为什么它与第一个代码几乎相同的时间?
答案 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()