python - 如何继承multiprocessing.Pipe?

标签 python class inheritance multiprocessing python-multiprocessing

我想围绕 Python 的 multiprocessing.Pipe 构建一个包装类目的。继承自 multiprocessing众所周知,模块存在挑战(有关讨论 multiprocessing.Queue 继承的类似问题,请参阅 here),我遇到了无法解决的错误。

让我们考虑一个简单的例子:

from multiprocessing import Pipe


class MyClass1: pass


class MyClass2(Pipe, MyClass1):
    pass

这里我们创建一个类MyClass2继承自 Pipe 类和自定义类 MyClass1 .运行上面的将提高

TypeError: metaclass conflict: the metaclass of a derived class
 must be a (non-strict) subclass of the metaclasses of all its bases

我知道要解决这个错误,我可能必须引入一个元类 MyClass2可以继承自,但是当我尝试确定 Pipe 的元类时对象使用 type(Pipe)我得到 <class 'type'>这根本没有帮助。

我在上面链接的 Stack Overflow 问题提到本质上有一种特殊的继承方式 Queue . Pipe 也有特殊的方法吗? ?关于如何避免此错误的任何建议?

最佳答案

没有 Pipe 类。它适用于 multiprocessing.Queue 因为有一个 multiprocessing.queues.Queue 类,但是 multiprocessing.Pipe 只是由另一个 支持multiprocessing.connection.py 中的 Pipe 函数。

您正在尝试继承一个总是返回两个 连接对象的函数。您宁愿必须对 Pipe 可以返回的各种连接对象进行子类化。这将是什么连接对象取决于操作系统,并且取决于连接是否应该是双工/单工的。不过,我怀疑这是个好主意。 (看看 multiprocessing.connection.py 就可以摆脱这个想法;)

我建议创建您自己的 MyPipe 函数,让它在内部调用 multiprocessing.Pipe 并让它附加到返回的连接对象,无论您需要什么。

关于python - 如何继承multiprocessing.Pipe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166021/

相关文章:

java - 使用父配置或 'downcast parent to child' 实例化子对象

c# - 如何仅基于基类型创建派生对象?

python - 在eclipse中远程调试python项目

python - 使用 python3 和 raspberry pi3 的两个按钮 react 游戏

python - 两个列表的交集,在第一个列表中保留重复项

python - Python中的平均错误率

scala - 继承Scala中的apply方法

c++ - 创建一个带有静态成员容器的类,其中包含该类的所有实例?

c++ - 使用父类中的变量

C++:空类的对象的大小是多少?