私はmultiprocessing
Pythonでライブラリを使用しています。関数から返されたオブジェクトにプロキシを作成する必要があることを定義する方法はわかりますが、現在のプロセス内のオブジェクトをプロキシに変換して、それらをパラメーターとして渡すことができるようにしたいと考えています。
たとえば、次のスクリプトを実行します。
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
メソッドが記載されていましたが、サポートされていないようです。何か案は?誰か知っていますか?