检查 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.
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.