You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Requests中如何在后台线程等待请求响应?

解决方法

你的代码里,send_request函数中的requests.get()本身就会阻塞子线程直到拿到响应,子线程已经在等待响应了。如果你是想让主线程感知响应完成、拿到结果,同时不在主线程调用requests.get(),可以用以下几种方式:

1. 直接在线程内部处理响应

这是最简单的方式,拿到响应后直接在子线程里完成后续逻辑,主线程完全不用干预:

import requests
import threading

def send_request():
    response = requests.get(url="https://www.google.com/")
    # 在这里直接处理响应
    if response.ok:
        print(f"请求成功,响应内容长度:{len(response.text)}")
    else:
        print(f"请求失败,状态码:{response.status_code}")

threading.Thread(target=send_request, daemon=False).start()
# 主线程可以继续执行自己的任务,不用管请求的事

2. 用队列传递响应结果给主线程

如果需要主线程拿到响应结果,但不想直接调用requests.get(),可以用队列安全传递数据:

import requests
import threading
from queue import Queue

def send_request(result_queue):
    response = requests.get(url="https://www.google.com/")
    # 将响应放入队列
    result_queue.put(response)

result_queue = Queue()
thread = threading.Thread(target=send_request, args=(result_queue,), daemon=False)
thread.start()

# 主线程可以先做其他事,之后再从队列取结果
# 如果要等响应回来再继续,就调用join()等待线程结束
thread.join()
response = result_queue.get()  # 这里的get()是队列的方法,不是requests的get()
print(f"主线程拿到响应状态码:{response.status_code}")

3. 用回调函数处理响应

定义一个处理响应的回调函数,子线程拿到响应后自动调用:

import requests
import threading

def handle_response(response):
    # 这里写处理响应的逻辑
    print(f"回调函数处理响应:状态码{response.status_code}")

def send_request(callback):
    response = requests.get(url="https://www.google.com/")
    callback(response)

threading.Thread(target=send_request, args=(handle_response,), daemon=False).start()
# 主线程继续执行,回调会在子线程中触发

注意:requests.get()在子线程里是同步阻塞的,所以子线程会一直等到响应返回才会执行后续代码,你不用额外写"wait for the response"的逻辑。

内容的提问来源于stack exchange,提问作者Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:28:28