【发布时间】:2016-08-26 04:24:58
【问题描述】:
我有以下代码:
import time
from threading import Thread
def fun1():
time.sleep(5)
def fun2():
time.sleep(5)
def fun3():
time.sleep(5)
def fun4():
time.sleep(5)
if __name__ == '__main__':
t1 = Thread(target=fun1, args=())
t2 = Thread(target=fun2, args=())
t3 = Thread(target=fun3, args=())
t4 = Thread(target=fun4, args=())
t1.start()
t2.start()
t3.start()
t4.start()
start = time.clock()
t1.join()
t2.join()
t3.join()
t4.join()
end = time.clock()
print("Time Taken = ",end-start)
Que1:一次只服务一个线程,这意味着如果控制在线程 t1,其余线程将等待。一旦上下文切换到线程 t2,其余所有线程(t1、t3 和 t4)都将等待。 这是正确的理解吗?
Que2:如果我对 Que1 的理解是正确的,总时间(开始 - 结束)应该是 20 秒(与以顺序方式而不是线程方式运行一样好)......但它有点接近 5 秒。 ...为什么?归根结底,线程正在按顺序(尽管不是全部)一个接一个地执行 请外行解释一下,我的理解哪里不对?
Que3:如果我使用多处理做同样的事情会怎样?执行会有什么不同?
Que4:假设(假设)fun1() 的代码对路由器 1 执行 1000 次重复计数 ping 并且需要 1 分钟的时间。 类似地,fun2() 对路由器 2 执行 1000 次重复计数 ping,耗时 1 分钟。 同样,fun3() 对路由器 3 执行 1000 次重复计数 ping,耗时 1 分钟。
如果我按顺序执行此操作,则总预期时间为 3 分钟(ping 到 R1,然后 ping 到 R2,然后 ping 到 R3) 但是当我使用线程执行此操作时,总执行时间几乎接近 1 分钟。为什么 ?我无法理解。
【问题讨论】:
标签: python multithreading multiprocessing python-2.x gil