我想知道队列是否有文件描述符,以及如何找到它?
Queue
类使用单向 multiprocessing.Pipe()
进行通信。._reader
和 ._writer
属性获取管道的任一端,并且 (至少在 POSIX 上),这些属性具有 .fileno()
方法。>>> import multiprocessing
>>> queue = multiprocessing.Queue()
>>> queue._reader.fileno()
3
>>> queue._writer.fileno()
4
让我强调一下这里的“私有”名称; ._reader
和._writer
属性是实现细节,因此可以在将来的版本中更改而不会破坏已发布的API。请自行承担风险。
fileno()
方法始终存在,但在非 POSIX 操作系统中,它可能返回进程句柄而不是文件描述符。 顺便说一下,我更强调使用_reader
和_writer
是实现细节,并且不能保证未来将会起作用。 - Bakuriu(private)
标记中所指的,我会更加强调它。很高兴看到确认Windows也有用于单向管道的.fileno()
方法(我在源代码中看到的只有win32.ConnectNamedPipe()
被使用,而我不熟悉该调用)。 - Martijn Pietersdir()
,例如dir(Queue())
会显示._reader
和._writer
属性。通过记录这些属性,它们将被固定下来以供未来版本支持,现在实现可以根据需要自由更改。 - Martijn Pieters