协调器用法演示

一 实例描述
先建立一个100大小的队列。主线程不停地加1,队列线程再把主线程里的计数器放到队列里。当队列为空时,主线程在sess.run(queue.dequeue())语句位置挂起,当队列线程写入队列中时,主线程的计数器开始工作。整个操作都是在使用with语法的session中进行的,由于使用了Coordinator,当session要关闭之前会进行coord.request_stop函数将所有线程关闭,之后才会关闭session。
二 代码
import tensorflow as tf  
#创建长度为100的队列  
queue = tf.FIFOQueue(100,"float")  
c = tf.Variable(0.0)  #计数器  
#加1操作
op = tf.assign_add(c,tf.constant(1.0))  
#操作:将计数器的结果加入队列  
enqueue_op = queue.enqueue(c)  
  
#创建一个队列管理器QueueRunner,用这两个操作向q中添加元素。目前我们只使用一个线程:  
qr = tf.train.QueueRunner(queue,enqueue_ops=[op,enqueue_op])
with tf.Session() as sess:  
    sess.run(tf.global_variables_initializer())  
       
    coord = tf.train.Coordinator()  
      
    ## 启动入队线程, Coordinator是线程的参数  
    enqueue_threads = qr.create_threads(sess, coord = coord,start=True)  # 启动入队线程  
      
    # 主线程  
    for i in range(0, 10):  
        print ("-------------------------")  
        print(sess.run(queue.dequeue()))  
      
     
    coord.request_stop()  #通知其他线程关闭 其他所有线程关闭之后,这一函数才能返回  
    #join操作经常用在线程当中,其作用是等待某线程结束  
    #coord.join(enqueue_threads)
三 运行结果
-------------------------
1788.0
-------------------------
1789.0
-------------------------
2066.0
-------------------------
2073.0
-------------------------
2347.0
-------------------------
2562.0
-------------------------
2568.0
-------------------------
2573.0
-------------------------
2578.0
-------------------------
2580.0
四 说明
还可以使用coord.join(enqueue_threads)指定等待某个进程结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值