python-tensorflow Coordinator管理多线程
发布日期:2021-11-05 07:52:17 浏览次数:77 分类:技术文章

本文共 1681 字,大约阅读时间需要 5 分钟。

参考: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 tfimport numpy as npimport threadingimport 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,但在下一轮将退。

转载地址:https://blog.csdn.net/xingghaoyuxitong/article/details/114654979 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python-tensorflow Coordinate和QueueRunner配合管理队列-提取数据
下一篇:Python多线程编程(一):threading 模块 Thread 类的用法详解

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月23日 01时07分07秒