检查 Python multiprocessing.Connection 的实例?

Check for instance of Python multiprocessing.Connection?

Connection 个对象在打开 multiprocessing.Pipe 时创建。但是,尚不清楚如何检查对象是否是 Connection.

的实例

在 Python3 (3.4, 3.3, !3.2) 中,要检测 Connection 的实例,我可以这样做:

from multiprocessing.connection import Connection

if isinstance(f, Connection):
  print("f is a Connection to a Pipe")

from multiprocessing.dummy.connection import Connection 也适用于所有 Python3,但不适用于 Python2。

但是,这会导致 ImportError 使用 Python2。我应该如何可靠地检查 Connection 对象?

Python2 和 3 w 之间存在显着的实现差异。河吨。多处理连接对象。在 Python 2 中,您可以通过以下方式导入它们:

from _multiprocessing import Connection

在 Python 2 中,Connection class 是在辅助模块 _multiprocessing 中实现的,用 C 编写(来源 here)。我认为它是用 C 语言编写的,以便更好地访问 Windows API 并且可能出于性能原因。我假设在 Python 3 的情况下,实现命名管道所需的特殊 Windows API 调用已外部化到 winapi 模块。

根据 Python 版本,您可以轻松地从 multiprocessing.connection_multiprocessing 导入连接,以便您的代码在 Python 2 和3.

假设您的对象可能与连接有很大不同,您可以这样做:

if hasattr(f, 'recv'):
     print("f can be received from")

这将是可移植的,无需在 Python 中导入私有 class 2.