gpt4 book ai didi

python - IOLoop.add_handler 不接受某些文件描述符

转载 作者:行者123 更新时间:2023-12-01 04:56:06 25 4
gpt4 key购买 nike

Python Tornado 的 IOLoop.add_handler(fd,handler,events) 表示“fd 参数可以是整数文件描述符,也可以是具有 fileno() 方法的类文件对象”,如下所示4.0 版本中,它“除了原始文件描述符之外,还添加了传递类文件对象的功能。

但是,在 Linux 上添加类似文件的对象(实际的文件对象)会失败:

>>> loop.add_handler (open ('XYZ'), handler, loop.READ)
IOError: [Errno 1] Operation not permitted

即使接受 stdin、stdout、stderr,直接添加文件描述符也会失败:

>>> from tornado import ioloop
>>> loop = ioloop.IOLoop.current ()
>>> f = open ('XYZ')
>>> f.fileno()
4
>>> def handler (fd, events): pass
...
>>> loop.add_handler (0, handler, loop.READ)
>>> loop.add_handler (1, handler, loop.READ)
>>> loop.add_handler (2, handler, loop.READ)
>>> loop.add_handler (4, handler, loop.READ)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 677, in add_handler
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted

This explanation说异步 IO 不适用于常规文件。

fd 的 0、1、2 和 open('XYZ').fileno() 的 fd 有什么非常不同的地方吗?这意味着文档应该令人困惑地说:“添加了传递类文件对象的能力,但实际上不是文件对象。”

最佳答案

FD 0、1 和 2 通常(但并非总是!)管道而不是常规文件。 IOLoop 文档可能应该说“类套接字对象”而不是“类文件对象”,或者简单地“具有 fileno 方法的对象”。

IOLoop 支持的文件描述符类型因平台而异。在 posix 平台上,它支持套接字和管道(也许还有其他一些,如 ttys),而在 Windows 上,它仅支持套接字。

关于python - IOLoop.add_handler 不接受某些文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com