多处理:AttributeError:'导入的'对象没有属性'__private_method'

2024-09-29 17:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的工作代码中遇到了这个问题,所以我不能显示它。但我写了一些简短的例子,准确地再现了错误并切断了冗余逻辑。在

示例有两个文件:Example.py&;ImportedExample.py。在

示例.py

from multiprocessing import Process
from ImportedExample import Imported

class Example:
    def __init__(self, number):
        self.imported = Imported(number)

def func(example: Example):
    print(example)

if __name__ == "__main__":
    ex = Example(3)

    p = Process(target=func, args=(ex,))
    p.start()

导入示例.py

^{pr2}$

回溯如下:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File"C:\Python\Python36\lib\multiprocessing\spawn.py", line 105, in spawn_main 
exitcode = _main(fd)
  File "C:\Python\Python36\lib\multiprocessing\spawn.py", line 115, in _main
self = reduction.pickle.load(from_parent)
AttributeError: 'Imported' object has no attribute '__private_method'

主要的细节是,当我使__private_method()非私有(重命名为private_method())时,一切正常。在

我不明白为什么会这样。有什么建议吗?在


Tags: infrompyself示例mainexampleline
1条回答
网友
1楼 · 发布于 2024-09-29 17:16:13

multiprocessing模块使用pickle在进程之间传输对象。在

对于一个对象,它必须可以通过名称访问。由于private name mangling,引用的私有方法不属于该类别。在

我建议将方法设为protected——即只使用一个前导下划线来命名方法。从全局的角度来看,受保护的方法应该像私有方法一样对待,但它们不受名称混乱的影响。在

相关问题 更多 >

    热门问题