检查Python multiprocessing.Connection的实例?

时间:2015-02-16 20:26:02

标签: python multiprocessing typechecking python-multiprocessing

打开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对象?

2 个答案:

答案 0 :(得分:1)

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

from _multiprocessing import Connection

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

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

答案 1 :(得分:0)

假设您的对象可能与Connection有很大不同,您可以执行以下操作:

SELECT *
FROM
(SELECT * FROM A SAMPLE 1000) t1
LEFT JOIN
(SELECT * FROM B SAMPLE 1000) t2
    ON t1.col = t2.col

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