操作
バグ #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 さんが約7年前に追加. 6年以上前に更新.
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