另一个线程等待HTTP响应时,另一个线程会执行吗?

问题描述 投票:1回答:1

所以我刚看完YouTube上的this视频。据我了解,一个线程休眠时,程序中的其他线程可以运行。我的问题是,正在等待HTTP响应被视为“正在休眠”吗?并且在等待响应时是否还会执行其他任务?

例如:

from threading import Thread
from requests import get

def send_request():
    response = get('https://www.google.com/')
    return response

def add(x):
    return x + 2

t1 = Thread(target=send_request)
# t1.start()
t2 = Thread(target=add, args=(1,))
# t2.start()
t3 = Thread(target=add, args=(3,))
# t3.start()

t1.start()
t2.start()
t3.start()

假设从get('https://www.google.com/')得到响应需要100毫秒,t1t2会在100毫秒内执行以获得响应吗?实例化ALL之后在每个线程对象上调用.start()与实例化EACH之后调用.start()时有什么区别?

感谢所有提前答复的人!

python python-3.x multithreading python-requests sleep
1个回答
1
投票

正在等待HTTP响应被视为“正在休眠”吗?

等待HTTP响应很慢,并且CPU很可能会在响应可用之前切换到运行其他线程。答案是

等待响应时其他任务会执行吗?

。如果将print语句放在addsend_request函数中,则会看到add将在send_request之前打印其输出。

[实例化ALL后与在每次实例化后调用.start()相反,当我在每个线程对象上调用.start()时有什么区别?

几乎没有无差异。当线程启动时(使用start()),它被设置为与主程序的线程并发运行。主线程也可以启动其他线程,它们也可以同时运行。

© www.soinside.com 2019 - 2024. All rights reserved.