当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。