機能 #4031
manager_nameに指定が無い場合にmanager_<プロセス番号>でスレーブマネージャを起動する
Start date:
05/02/2017
Due date:
% Done:
100%
Estimated time:
Description
create_component実行時にmanager_nameの指定が無く、実行中のスレーブマネージャでRTCが起動できない場合に、新たにmanager_<プロセス番号>というマネージャ名でスレーブマネージャを起動する。
スレーブマネージャでRTCが起動できない場合、現在はマスターマネージャ上でRTCを起動できるか試みるようになっているが、この機能は削除する。
Related issues
Associated revisions
History
#1 Updated by n-miyamoto about 6 years ago
- Status changed from 新規 to 解決
- % Done changed from 0 to 100
マネージャ名に%pがある場合にプロセスIDと置き換えるように処理を変更しました。
def initManager(self, argv): (省略) self._config.setProperty("manager.instance_name",self.formatString(self._config.getProperty("manager.instance_name"), self._config))
マネージャが起動したかの確認については、スレーブマネージャのインスタンス名がマスターマネージャ側で既知である必要があります。
subprocessモジュールの機能により起動したプロセスのIDは取得できるものの、これはバッチファイルを起動してその中でrtcdを実行しているため、rtcdのプロセスIDは取得できません。
このため、あらかじめ登録済みのスレーブマネージャのインスタンス名一覧を保持しておき、新たにmanager_****という名前のマネージャが登録されるかでマネージャが起動したかを判定するようにしました。
guard_slave = OpenRTM_aist.ScopedLock(self._slaveMutex) for slave in self._slaves[:]: try: prof = slave.get_configuration() prop = OpenRTM_aist.Properties() OpenRTM_aist.NVUtil.copyToProperties(prop, prof) name = prop.getProperty("manager.instance_name") if re.match(regex, name) and not (name in slaves_names): mgrobj = slave except: self._rtcout.RTC_ERROR("Unknown exception cought.") self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) self.remove_slave_manager(slave) del guard_slave
#2 Updated by n-ando almost 6 years ago
- Status changed from 解決 to 終了
#3 Updated by katami over 5 years ago
- Related to 機能 #4187: manager_nameに指定が無い場合にmanager_<プロセス番号>でスレーブマネージャを起動する added
[compat,->RELENG_1_2] refs #4031