我想围绕 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/