Tensorflow的线程同步和停止

作者: 大海龟啦啦啦 | 来源:发表于2020-06-07 14:39 被阅读0次

Tensorflow的多线程使用

Tensorflow的计算主要在使用CPU/GPU和内存,而数据读取涉及磁盘操作,速度远低于前者操作。因此通常会使用多个线程读取数据,然后使用一个线程来使用这些数据,QueueRunner就是来管理这些读写队列的线程,而只用QueueRunner的话有时候会造成这种同步的卡壳,导致程序被强行关闭,因此需要QueueRunner和Coordinator的配合来进行调用,共同协作来停止绘画中的所有线程,并向在等待所有工作线程终止的程序报告。
示例如下所示:

import tensorflow as tf

q = tf.FIFOQueue(1000 , "float32")
counter = tf.Variable(0.0)
#   函数原型是tf.assign_add(ref,value,use_locking=None,name=None),作用是更新ref的值,通过增加value,即:ref = ref + value
add_op = tf.assign_add(counter , tf.constant(1.0))
#   通过enqueue函数将counter变量加入队列
enqueueData_op = q.enqueue(counter)

#   Session 是 Tensorflow 为了控制,和输出文件的执行的语句,意思就是将其加入tensorflow的对话,
#   运行 sess.run() 可以获得你要得知的运算结果, 或者是你所要运算的部分。
sess = tf.Session()
#   tf.train.QueueRunner是创建并运行线程的函数,q代表之前创建的队列,enqueue_ops代表需要加入到q的线程
#   add_op表示的是计数,enqueueData_op表示的是加入队列,这里实际创建了4个线程,两个增加计数,两个执行入队
#   这一步的作用是用多个线程向队列添加数据,这样的话就可以减少由于数据读取的慢速度影响程序整体的运行速度
qr = tf.train.QueueRunner(q , enqueue_ops=[add_op , enqueueData_op] * 2)
sess.run(tf.global_variables_initializer())

#   开启一个协调器
coord = tf.train.Coordinator()
#   启动队列运行器线程
enqueue_threads = qr.create_threads(sess , coord=coord , start=True)


for i in range(10):
    print(sess.run(q.dequeue()))

#   完成后,要求线程停止
coord.request_stop()
#   并等待这些线程完成
coord.join(enqueue_threads)

相关文章

  • Tensorflow的线程同步和停止

    Tensorflow的多线程使用 Tensorflow的计算主要在使用CPU/GPU和内存,而数据读取涉及磁盘操作...

  • java并发之守护线程

    java中有两种线程,用户线程和守护线程用户线程:主线程停止时,用户线程不会停止守护线程:主线程停止时,守护线程也...

  • OpenMP多线程——Parallel for

    多线程——线程同步 数据竞争问题 线程互斥同步——critical 线程互斥同步——atmoic 线程互斥同步——...

  • iOS多线程-线程同步/线程安全

    线程同步和同步线程是两个概念。不要搞混了。 同步线程:串行执行任务的线程,会把你的同步代码一行一行的执行下去,即使...

  • Java多线程——学习笔记一:进程与线程以及线程安全

    进程和线程 进程 资源分配的最小单位。 线程 程序执行的最小单位 进程和线程的关系 同步和异步 同步:对于方法调用...

  • Java之 线程(二)

    提问 Thread和Runnable的区别?sleep和yield的区别? 线程同步 什么是线程同步? 如下代码 ...

  • Java高级-多线程

    同步和异步的区别同步: 多个线程在同步过程中,只有一个线程在工作,其他线程在等待,这个过程是单线程的(串行)异步...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 多线程_2_停止和暂停

    线程停止 停止线程是在多线程开发时很重要的技术点,掌握线程停止技术可以对线程的停止进行有效的处理。 停止线程的方法...

  • iOS线程同步

    iOS线程同步 iOS线程同步

网友评论

    本文标题:Tensorflow的线程同步和停止

    本文链接:https://www.haomeiwen.com/subject/hmdctktx.html