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

Python 3.6中在while循环内发送非阻塞请求的问题求助

解决Python 3.6中非阻塞请求的问题

嘿,我看你现在在做实时数据处理的小应用,卡在非阻塞请求这块了——咱们来搞定它!

首先得明确:你现在的send_non_blocking_request如果是用常规同步库(比如requests)写的,那它本质还是阻塞的,哪怕你没刻意等响应,程序也会卡在请求完成之前,这就会拖慢你后续的实时数据读取和处理。

针对Python 3.6,给你两个最实用的方案,看你现有代码的情况选:

方案一:用线程池快速改造(推荐,改动最小)

Python 3.6自带concurrent.futures.ThreadPoolExecutor,专门处理这种I/O密集型的非阻塞需求(网络请求就是典型的I/O操作)。它会在后台开线程处理请求,主线程该干嘛干嘛,完全不耽误。

修改后的代码大概是这样:

from concurrent.futures import ThreadPoolExecutor
# 初始化线程池,max_workers根据你的请求频率调整,2-5足够应付大部分场景
executor = ThreadPoolExecutor(max_workers=2)

def send_non_blocking_request(x):
    # 这里可以保留你原来的请求代码,比如用requests发POST
    import requests
    try:
        requests.post("你的服务器地址", data=x)
    except Exception as e:
        # 加个异常捕获,不然线程里的错误不会主动提示
        print(f"请求发送失败: {str(e)}")

def foo():
    x = get_input_and_pre_process()  # 同步读取处理数据
    # 把请求任务提交给线程池,不用等它完成
    executor.submit(send_non_blocking_request, x)
    do_something_else(x)  # 这里会立刻执行,完全不被请求阻塞

while True:
    foo()

这个方案几乎不用改你原来的send_non_blocking_request逻辑,只要把它扔到线程池里就行,非常适合快速解决问题。

方案二:用asyncio异步处理(适合愿意重构请求逻辑的情况)

如果你想彻底用异步的方式实现,Python 3.6的asyncio已经足够稳定,但需要你把同步的请求代码改成异步的(比如用aiohttp替代requests)。

示例代码:

import asyncio
import aiohttp

async def async_send_request(x):
    # 用aiohttp做异步请求
    try:
        async with aiohttp.ClientSession() as session:
            async with session.post("你的服务器地址", data=x):
                pass  # 不需要响应的话直接跳过
    except Exception as e:
        print(f"异步请求失败: {str(e)}")

# 获取事件循环
loop = asyncio.get_event_loop()

def foo():
    x = get_input_and_pre_process()
    # 把异步任务扔进事件循环
    loop.create_task(async_send_request(x))
    do_something_else(x)

while True:
    foo()
    # 让事件循环抽点时间处理后台的异步任务,不然任务会堆积
    loop.run_until_complete(asyncio.sleep(0.001))

这个方案更“正统”的异步实现,但需要你替换掉同步的网络库,适合愿意深入改造代码的情况。

注意事项

  • 线程池的max_workers别设太大,不然会占用过多系统资源,根据你的请求频率调整就行。
  • 不管用哪种方案,都要给请求代码加异常捕获,不然后台的错误会悄无声息地发生,很难排查。
  • 实时循环里如果有sleep,时长别太长,保证数据读取的实时性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:53:15