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

Windows平台Python Asyncio执行后print报OSError: [WinError 6]无效句柄问题

Windows下Python异步脚本执行后print报错:OSError: [WinError 6] 句柄无效

在Windows系统使用Python 3.11.6运行包含异步函数的脚本时,执行完异步代码后所有print()语句都会抛出错误:

OSError: [WinError 6] The handle is invalid

相同代码在Linux和MacOS系统可正常运行。

原始代码

import ezkl
import asyncio

async def f():
    res = await ezkl.calibrate_settings("input.json", "model_4.onnx", "settings.json", "resources")

asyncio.run(f())

print("test")

已尝试的无效方案

使用nest_asyncio.apply()并修改事件循环策略,仍出现相同错误:

import ezkl
import asyncio
import nest_asyncio

async def f():
    res = await ezkl.calibrate_settings("input.json", "model_4.onnx", "settings.json","resources")

nest_asyncio.apply()
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
loop = asyncio.get_event_loop()
loop.run_until_complete(f())

print("test")

解决方案

问题根源是ezkl的异步函数在Windows平台下可能意外修改/关闭了主进程的标准输出句柄,导致后续IO操作失败。可通过以下方式解决:

方案1:将print语句移至异步函数内部

避免在事件循环结束后执行IO操作:

import ezkl
import asyncio

async def f():
    res = await ezkl.calibrate_settings("input.json", "model_4.onnx", "settings.json", "resources")
    print("test")  # 把print放在异步函数内执行

asyncio.run(f())

方案2:保存并恢复标准输出句柄

在异步执行前后备份、恢复stdout句柄,避免被ezkl修改:

import ezkl
import asyncio
import os
import sys

async def f():
    res = await ezkl.calibrate_settings("input.json", "model_4.onnx", "settings.json", "resources")

# 备份标准输出句柄
stdout_fd = sys.stdout.fileno()
backup_fd = os.dup(stdout_fd)

asyncio.run(f())

# 恢复标准输出句柄
os.dup2(backup_fd, stdout_fd)
os.close(backup_fd)

print("test")

方案3:用subprocess隔离ezkl执行

通过子进程运行ezkl相关逻辑,避免影响主进程的IO句柄:

import subprocess
import sys

# 把ezkl逻辑放到单独的脚本文件(比如run_ezkl.py)中,然后用subprocess调用
subprocess.run([sys.executable, "run_ezkl.py"], check=True)
print("test")

run_ezkl.py内容:

import ezkl
import asyncio

async def f():
    res = await ezkl.calibrate_settings("input.json", "model_4.onnx", "settings.json", "resources")

asyncio.run(f())

内容的提问来源于stack exchange,提问作者finlytics-hub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:36