第七节 线程队列

import tensorflow as tf

# 模拟:异步子线程存入样本,主线程读取样本
# 1.定义一个队列,容量10000
q = tf.FIFOQueue(1000, tf.float32)

# 2.创建一个变量,用assign_add实现自增
var1 = tf.Variable(0.0)
# 第二个参数的数据类型必须跟第一个参数一致,且表示每次自增的量
data = tf.assign_add(var1, tf.constant(0.1))

# 3.入队
en_q = q.enqueue(data)

# 4.定义队列管理器op,enqueue_ops指定子线程需要做的op操作,*2表示子线程的个数,TensorFlow中op是有依赖的,这边指定线程进行的en_q op它会自动去寻找data
qr = tf.train.QueueRunner(q, enqueue_ops=[en_q]*2)

# 5.初始化变量op
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    # 初始化变量
    sess.run(init_op)

    # 开启线程管理器
    coord = tf.train.Coordinator()

    # 开启子线程,start默认false,此时还需要调用thd.start()的方法去开启线程,改成true自动会开启线程
    thd = qr.create_threads(sess, coord=coord, start=True)

    # 主线程,不断读取训练数据
    for i in range(300):
        print(sess.run(q.dequeue()))

    # 回收线程,request_stop主线程完成强制停止子线程,还有一种是should_stop检查是否要求停止子线程
    coord.request_stop()
    coord.join(thd)

猜你喜欢

转载自www.cnblogs.com/kogmaw/p/12597885.html