如何从multiprocessing.Pipe继承?

时间:2019-01-13 04:08:31

标签: python class inheritance multiprocessing python-multiprocessing

我想围绕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是否还有一种特殊的方式?有关如何避免此错误的任何建议?

2 个答案:

答案 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 ########################################################## 是一种方法,因此您不能从中继承。

相关问题