[Twisted-Python] inlineCallbacks cascading cancelling and more

Sergey Magafurov smagafurov at naumen.ru
Tue Aug 17 02:30:59 EDT 2010


Some mistake fixes in my previous message
> @inlineCallbacks
> def acquire_tts_for(self, call):
>     tts_connection = yield self.tts.acquire_connection(timeout=10) # 
> may raise TimeoutError inside
>     yield call.make_audio_link_with(tts_connection, 'in', timeout=10) 
> # may raise TimeoutError inside
>     return tts_connection
>
> @inlineCallbacks
> def acquire_asr_for(self, call):
>     asr_connection = yield self.asr.acquire_connection(timeout=10) # 
> may raise TimeoutError inside
>     yield call.make_audio_link_with(asr_connection, 'out', timeout=10) 
> # may raise TimeoutError inside
>     return asr_connection

Above code must be replaced with:

@inlineCallbacks
def acquire_tts_for(self, call):
     # may raise TimeoutError inside
     tts_connection = yield self.tts.acquire_connection(timeout=10)
     try:
         # may raise TimeoutError inside
         yield call.make_audio_link_with(tts_connection, 'in', timeout=10)
     except Exception:
         # we MAY receive this Exception when cascading cancellation occurs
         tts_connection.release()
         raise
     else:
         return tts_connection

@inlineCallbacks
def acquire_asr_for(self, call):
     # may raise TimeoutError inside
     asr_connection = yield self.asr.acquire_connection(timeout=10)
     try:
         # may raise TimeoutError inside
         yield call.make_audio_link_with(asr_connection, 'out', timeout=10)
     except Exception:
         # we MAY receive this Exception when cascading cancellation occurs
         asr_connection.release()
         raise
     else:
         return asr_connection




More information about the Twisted-Python mailing list