2

以下は、http: //docs.python.org/library/multiprocessing.html#sharing-state-between-processes の微調整された例です。

from multiprocessing import Process, Manager

def f(d):
    print d                 # 1
    print type(d)

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    p = Process(target=f, args=(d))
    p.start()
    p.join()

私は次のようなことをしようとしています

from multiprocessing import Process, Manager
class abcd(Process):

    def __init__(self,d):
        Process.__init__(self)
        self.d = d
        print self.d            # 2
        print type(self.d)

    def run(self):
        print self.d            # 3
        print type(self.d)

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()

    proc = abcd(d)
    proc.start()

実際に私を悩ませているのは、1 行目と 2 行目で期待どおりの {} - 空白の辞書が表示されることです。しかし、3行目で印刷されます

<DictProxy object, typeid 'dict' at 0x18ac9d0; '__str__()' failed>

Process からの継承中に何か見逃したことがありますか?

4

1 に答える 1

4

問題は、フォークされたプロセスが辞書から値を取得する前に、メインプロセスが終了することです。

proc.join() を呼び出して、プロセスに辞書を取得する機会を与える必要があります。

サンプルコードを見ると、まったく同じことがわかります。

于 2013-02-19T21:42:04.060 に答える