多线程python程序的执行时间

时间:2016-07-23 22:27:03

标签: python multithreading

考虑到GIL,我预计这个程序会在9秒内完成,但令我惊讶的是,它以4秒结束。寻找可能的原因或我错过了什么?

import time
import threading

def get_data(start, end):
    res = []
    for i in range(start, end):
        time.sleep(1)
        res.append(i)
    print res


range_list = [(1,4), (4,7), (6,10)]
for r in range_list:
    t = threading.Thread(target=get_data, args = (r[0], r[1]))
    t.start()

执行时间: -

没有线程 - 9秒

使用线程 - 4秒

1 个答案:

答案 0 :(得分:1)

通常情况下,如果你不使用多线程,这个程序会在9秒内完成,因为python一个接一个地运行,所以当你输入time.sleep(1)时,python只需要等待一秒钟而另一方面不要任何东西。但是当你使用多线程时,程序会分别运行线程函数。因此,例如,如果您调用线程函数2次,则线程函数会在同一时间内逐行运行。

在此程序中,您将调用线程函数3次。第一次调用,python等待3秒,i = 1,i = 2,i = 3,第二次调用,python等待3秒,i = 4,i = 5,i = 6,最后调用python等待4秒,i = 6 ,I = 7,I = 8,I = 9。这些代码彼此分开运行,因此该程序在4秒内完成,因为最长时间是4秒。