我想围绕Python的multiprocessing.Pipe
对象构建包装器类。众所周知,从multiprocessing
模块继承有很多挑战(有关讨论multiprocessing.Queue
的继承的类似问题,请参见here),我遇到了我无法解决的错误。 / p>
我们来看一个简单的例子:
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'>
根本没有帮助。
我在上面链接的堆栈溢出问题提到,实际上有一种继承Queue
的特殊方法。 Pipe
是否还有一种特殊的方式?有关如何避免此错误的任何建议?
答案 0 :(得分:1)
没有Pipe
类。它适用于multiprocessing.Queue
,因为有一个multiprocessing.queues.Queue
类,但是multiprocessing.Pipe
仅由Pipe
中的另一个multiprocessing.connection.py
函数支持。
您正试图从始终返回两个连接对象的函数中继承。您宁愿必须继承Pipe
可以返回的各种连接对象。这将取决于OS的连接对象是什么,并且取决于连接是否应该是双工/单工。我怀疑那是个好主意。 (看看multiprocessing.connection.py
可以解决这个问题;)
我建议创建自己的MyPipe
函数,让其在内部调用multiprocessing.Pipe
,并根据需要将其附加到返回的连接对象中。
答案 1 :(得分:0)
来自python文档。 https://docs.python.org/3.7/library/multiprocessing.html
Pipe()函数返回一对通过管道连接的连接对象,该管道默认情况下为双工(双向)。
nuXmv > check_fsm
******** WARNING ********
Fair states set of the finite state machine is empty.
This might make results of model checking not trustable.
******** END WARNING ********
##########################################################
The transition relation is not total. A state without
successors is:
T_41 = -256
T_41_PRESENT = FALSE
module._next_t = State_120_idle
module.FlagLO = FALSE
module.FlagBO = FALSE
module.tt = 255
module.FlagTO = FALSE
The transition relation is not deadlock-free.
A deadlock state is:
T_41 = -256
T_41_PRESENT = FALSE
module._next_t = State_120_idle
module.FlagLO = TRUE
module.FlagBO = TRUE
module.tt = 255
module.FlagTO = TRUE
##########################################################
是一种方法,因此您不能从中继承。