python select使用IO多路复用 ,OSError: [WinError 10038]?

最近在学习python,使用select 监听IO多路复用

如下代码,select 第二个参数监听的是文件的操作对象,为啥会报OSError: [WinError 10038] 在一个非套接字上尝试了一个操作? 我是在windows操作系统上运行的。老师的视频是在linux上面运行的,老师的代码运行正常。

from socket import *
from select import select

if __name__ == "__main__":
    # 做几个IO用作监控
    s = socket()
    s.bind(('0.0.0.0', 8888))
    s.listen(3)

    # 文件操作对象
    fd = open('log.txt', 'a+')

    rs, ws, xs = select([s], [fd], [])

    print("rs", rs)
    print("ws", ws)
    print("xs", xs)

回复
阅读 429
2 个回答

Windows 上 select 不能用于文件。

select

Note

File objects on Windows are not acceptable, but sockets are. On Windows, the underlying select() function is provided by the WinSock library, and does not handle file descriptors that don’t originate from WinSock.

学习建议用虚拟机linux来学. 因为好多开发软件都是针对linux设计的, 在windows下有些功能不支持, 有些会报错.

https://www.oracle.com/cn/vir...

同时能练练Linux

推荐问题
宣传栏