芯
サーバー部分 - モジュールの登録とそれらの間の相互作用を担当するコア。Core は ThreadedServer として実行されます。CoreService は登録モジュールを提供します。登録するとき、接続のリストを保持し、それらを使用します。モジュールは、別のモジュールを呼び出す必要があるコア関数を呼び出します。しかし、接続のリストを使用すると機能せず、パフォーマンスが無限ループに陥ります。
class CoreService(rpyc.Service):
__modules = {}
def exposed_register_module(self, module_name):
if module_name in self.__modules:
return False
self.__modules[module_name] = self._conn
return True
def exposed_execute_query_module(self, module_name, attribute_name, args):
# TTTTTTTTTTHHHHHHHHHIIIIIIIISSSSSSSSSSSSSS
if module_name in self.__modules:
self.__modules[module_name].root
# return None
テストを実行
テストを実行すると、キーの組み合わせによって中断されるループに入り、次の出力が得られます。
^CTraceback (最新の呼び出しが最後): ファイル "/home/kpv/perseus/control-lib/perseus_control_lib/module.py"、67 行目、__getattr__ 内 return self.__core_connector.root.execute_query_module(self.__proxy_module_name, name, args) ファイル "/usr/local/lib/python2.7/dist-packages/rpyc/core/netref.py"、196 行目、__call__ 内 return syncreq(_self, consts.HANDLE_CALL, args, kwargs) syncreq のファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/netref.py」の 71 行目 return conn.sync_request(handler, oid, *args) ファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/protocol.py」、438行目、sync_request セルフサーブ (0.1) ファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/protocol.py」、387行目、サーブ data = self._recv(タイムアウト、wait_for_lock = True) ファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/protocol.py」、344行目、_recv self._channel.poll(タイムアウト) の場合: ファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/channel.py」、43行目、ポーリング return self.stream.poll(タイムアウト) ファイル「/usr/local/lib/python2.7/dist-packages/rpyc/core/stream.py」、41行目、投票 rl, _, _ = select([自分], [], [], タイムアウト) キーボード割り込み