當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.train.Coordinator用法及代碼示例


線程協調器。

用法

tf.train.Coordinator(
    clean_stop_exception_types=None
)

參數

  • clean_stop_exception_types 應導致協調器完全停止的異常類型的可選元組。如果將其中一種類型的異常報告給request_stop(ex),則協調器的行為就像調用了request_stop(None)。默認為(tf.errors.OutOfRangeError,),輸入隊列使用它來表示輸入結束。從 Python 迭代器提供訓練數據時,通常會將 StopIteration 添加到此列表中。

屬性

  • joined

這個類實現了一個簡單的機製來協調一組線程的終止。

用法:

# Create a coordinator.
coord = Coordinator()
# Start a number of threads, passing the coordinator to each of them.
...start thread 1...(coord, ...)
...start thread N...(coord, ...)
# Wait for all the threads to terminate.
coord.join(threads)

任何線程都可以調用coord.request_stop() 來請求所有線程停止。為了配合請求,每個線程必須定期檢查coord.should_stop()coord.should_stop() 在調用 coord.request_stop() 後立即返回 True

使用協調器運行的典型線程將執行以下操作:

while not coord.should_stop():
  ...do some work...

異常處理:

作為request_stop() 調用的一部分,線程可以向協調器報告異常。異常將從coord.join() 調用中重新引發。

線程代碼:

try:
  while not coord.should_stop():
    ...do some work...
except Exception as e:
  coord.request_stop(e)

主要代碼:

try:
  ...
  coord = Coordinator()
  # Start a number of threads, passing the coordinator to each of them.
  ...start thread 1...(coord, ...)
  ...start thread N...(coord, ...)
  # Wait for all the threads to terminate.
  coord.join(threads)
except Exception as e:
  ...exception that was passed to coord.request_stop()

為了簡化線程實現,Coordinator 提供了一個上下文處理程序stop_on_exception(),如果引發異常,它會自動請求停止。使用上下文處理程序,上麵的線程代碼可以寫成:

with coord.stop_on_exception():
  while not coord.should_stop():
    ...do some work...

停止寬限期:

在一個線程調用coord.request_stop() 後,其他線程有一個固定的停止時間,這稱為“停止寬限期”,默認為 2 分鍾。如果在寬限期到期後任何線程仍處於活動狀態,coord.join() 將引發 RuntimeError 報告落後者。

try:
  ...
  coord = Coordinator()
  # Start a number of threads, passing the coordinator to each of them.
  ...start thread 1...(coord, ...)
  ...start thread N...(coord, ...)
  # Wait for all the threads to terminate, give them 10s grace period
  coord.join(threads, stop_grace_period_secs=10)
except RuntimeError:
  ...one of the threads took more than 10s to stop after request_stop()
  ...was called.
except Exception:
  ...exception that was passed to coord.request_stop()

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.train.Coordinator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。