python-tensorflow Coordinator管理多线程

参考:https://blog.csdn.net/dongfeig54321/article/details/102099095?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=1328626.12514.16153813394111169&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

前文已经讲了,怎么样利用python的threading模块创建多线程并执行,这里来讲tensorflow中对线程的管理
TensorFlow提供了tf.Coordinator来管理建立的多线程
tf.Coordinator主要用于协同多个线程一起停止,并提供了should_stop、request_stop和join三个函数。
1、在启动线程之前需要声明一个tf.Coordinator类,并将这个类传入每一个创建的线程中;
2、启动的线程需要一直查询tf.Coordinatorl类中提供的should_stop函数,当这个函数的返回值为True时,则当前线程也需要退出;
每一个启动的线程都可以通过调用request_stop函数来通知其他线程是否退出。实际上,当某一个线程调用request_stop函数之后,
会影响其它线程should_stop函数的返回值,返回值将被设置为True,这样其他线程就可以同时终止。
import tensorflow as tf
import numpy as np
import threading
import time

# 线程中运行的程序,这个程序每隔1秒判断是否需要停止并打印自己的ID。
def MyLoop(coord, worker_id):
    # 使用tf.Coordinator类提供的协同工具判断当前线程是否需要停止并打印自己的ID
    while not coord.should_stop():
        # 随机停止所有线程
        if np.random.rand() < 0.1:
            print('Stoping from id: %d\n' % worker_id)
            # 调用coord.request_stop()函数来通知其他线程停止
            coord.request_stop()
        else:
            # 打印当前线程的ID
            print('Working on id: %d\n' % worker_id)
            # 暂停1秒
            time.sleep(1)

# 声明一个tf.train.Coordinator类来协同多个线程
coord = tf.train.Coordinator()
# 声明创建5个线程,将线程管理器送到线程中
threads = [threading.Thread(target=MyLoop, args=(coord, id)) for id in range(5)]
# 启动所有的线程
for t in threads: t.start()
# 等待所有线程退出
coord.join(threads)

 

当所有线程启动之后,每个线程会打印各自的ID,于是前面5行打印出了他们的ID。然后在暂停1秒后,所有线程又开始第二遍打印ID。这个时候有一个线程退出的条件达到,于是调用coord.request_stop函数来停止所有其他线程。在打印Stoping from id: 3之后,其他线程仍然在输出,这是因为这些线程已经执行完coord.request_stop的判断,于是仍然会继续输出自己的ID,但在下一轮将退。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值