2

私はmultiprocessingPythonでライブラリを使用しています。関数から返されたオブジェクトにプロキシを作成する必要があることを定義する方法はわかりますが、現在のプロセス内のオブジェクトをプロキシに変換して、それらをパラメーターとして渡すことができるようにしたいと考えています。

たとえば、次のスクリプトを実行します。

from multiprocessing import current_process
from multiprocessing.managers import BaseManager

class ProxyTest(object):
    def call_a(self):
        print 'A called in %s' % current_process()

    def call_b(self, proxy_test):
        print 'B called in %s' % current_process()
        proxy_test.call_a()

class MyManager(BaseManager):
    pass

MyManager.register('proxy_test', ProxyTest)

if __name__ == '__main__':
    manager = MyManager()
    manager.start()

    pt1 = ProxyTest()
    pt2 = manager.proxy_test()

    pt1.call_a()
    pt2.call_a()

    pt1.call_b(pt2)
    pt2.call_b(pt1)

...次の出力が得られます...

A called in <_MainProcess(MainProcess, started)>
A called in <Process(MyManager-1, started)>
B called in <_MainProcess(MainProcess, started)>
A called in <Process(MyManager-1, started)>
B called in <Process(MyManager-1, started)>
A called in <Process(MyManager-1, started)>

...しかし、出力の最終行が_MainProcess.

別のプロセスを作成してそこから実行することもできますが、プロセス間で渡す必要があるデータの量を最小限に抑えようとしています。Managerオブジェクトのドキュメントにはserve_foreverメソッドが記載されていましたが、サポートされていないようです。何か案は?誰か知っていますか?

4

1 に答える 1

1

なぜserve_foreverがサポートされていないと言うのですか?

manager = Mymanager()
s = manager.get_server()
s.serve_forever()

動作するはずです。

公式の例については、 managers.BaseManager.get_server doc を参照してください。

于 2009-09-28T10:12:23.843 に答える