尝试创建 multiprocessing.Queue 的子类时出现 TypeError 问题[重复]

问题描述 投票:0回答:1

我尝试创建

multiprocessing.Queue
的继承子类,就像我为
queue.Queue
所做的那样,但我收到错误:

Traceback (most recent call last):
  File "f:\d\multiprocessing-samples\test.py", line 4, in <module>
    class DataMultiProcQueue(multiprocessing.Queue):
TypeError: method expected 2 arguments, got 3

这是重现此错误的代码,我测试了 Python 3.10、3.11、3.12 中是否存在该错误。

import multiprocessing


class DataMultiProcQueue(multiprocessing.Queue):
    def __init__(self):
        super().__init__(self)


if __name__ == "__main__":
    my_queue = DataMultiProcQueue()
    my_queue.put(1)
    print(my_queue.get())

我错过了什么吗?

python multiprocessing
1个回答
0
投票

multiprocessing.Queue
实际上是
Queue
类实例的
multiprocess.context.DefaultContext
工厂方法。

(导入模块后,

multiprocessing
模块的命名空间将填充为
multiprocessing/__init__.py
中此实例的所有公共成员。)

真正的

Queue
类是
multiprocessing.queues.Queue
,所以你需要写:

import multiprocessing.queues

class DataMultiProcQueue(multiprocessing.queues.Queue):
    # …

我认为至少从 Python 3.8 开始就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.