操作
バグ #4392
完了RingBufferのバッファフル時に待機する処理
開始日:
2017/12/12
期日:
進捗率:
100%
予定工数:
説明
threading.Conditionのwait関数はPython 3.2以前と以降で動作が違う。
Python 3.2以降ではタイムアウトした場合にFalseを返し、それ以外ではTrueを返すが、Python 2.7等では常にNoneを返す。
このためPython 2系と3系で場合分けをする。
操作
        
        
    n-miyamoto さんがほぼ8年前に追加. 約7年前に更新.
100%
説明
threading.Conditionのwait関数はPython 3.2以前と以降で動作が違う。
Python 3.2以降ではタイムアウトした場合にFalseを返し、それ以外ではTrueを返すが、Python 2.7等では常にNoneを返す。
このためPython 2系と3系で場合分けをする。
以下のようにPython3の場合はwait関数の戻り値で判定し、Python2の場合はfull関数でバッファフルかを確認するように変更した。
          if sec != 0 or nsec != 0:
            wait_time = sec + (nsec/1000000000.0)
          else:
            wait_time = None
          ret = self._full_cond.wait(wait_time)
          if sys.version_info[0] == 3:
            if not ret:
              self._full_cond.release()
              return OpenRTM_aist.BufferStatus.TIMEOUT
          else:
            if self.full():
              self._full_cond.release()
              return OpenRTM_aist.BufferStatus.TIMEOUT