[英]How to inherit from multiprocessing.Pipe?
我想围绕 Python 的multiprocessing.Pipe
对象构建一个包装类。 众所周知,从multiprocessing
模块继承有其挑战(有关讨论multiprocessing.Queue
继承的类似问题,请参见此处),并且我面临无法解决的错误。
让我们考虑一个简单的例子:
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
可以继承的元类,但是当我尝试使用type(Pipe)
确定Pipe
对象的元类时,我得到<class 'type'>
帮助。
我在上面链接的 Stack Overflow 问题提到本质上有一种特殊的方式来继承Queue
。 Pipe
也有特殊的方法吗? 有关如何避免此错误的任何建议?
没有Pipe
类。 它适用于multiprocessing.Queue
因为有multiprocessing.queues.Queue
类,但是multiprocessing.Pipe
只是另一个支持Pipe
在功能上multiprocessing.connection.py
。
您正在尝试从始终返回两个连接对象的函数继承。 您宁愿必须对Pipe
可以返回的各种连接对象进行子类化。 这将是什么连接对象取决于操作系统并取决于连接是否应该是双工/单工。 不过,我怀疑这会是个好主意。 (看看multiprocessing.connection.py
从这个想法中得到治愈;)
我建议创建您自己的MyPipe
函数,让它在内部调用multiprocessing.Pipe
并让它根据您的需要附加到返回的连接对象。
来自 python 文档。 https://docs.python.org/3.7/library/multiprocessing.html
Pipe() 函数返回由管道连接的一对连接对象,管道默认为双工(双向)。
Pipe
是一种方法,因此您不能继承它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.