1. 程式人生 > >Tensorflow: 佇列與執行緒

Tensorflow: 佇列與執行緒

執行緒協同管理

# 利用Coordinator和QueueRunner來協同管理執行緒
import tensorflow as tf

queue = tf.FIFOQueue(100, 'float')  # 建立一個含100個元素的先進先出的佇列

enqueue_op = queue.enqueue([tf.random_normal([1])])  # 建立一個每次入隊一個tensorflow隨機數的運算

qr = tf.train.QueueRunner(queue, [enqueue_op] * 5)  # 用QueueRunner來建立5個同時維護這個佇列的執行緒

tf.train.add_queue_runner(qr)  # 將定義好的QueueRunner加入計算圖上指定的集合

out_tensor = queue.dequeue()  # 定義一個出隊操作,每次會得到一個tensor

with tf.Session() as sess:
    coord = tf.train.Coordinator()  # 使用Coordinator來協同啟動的執行緒,執行緒需要判斷停止訊號,也能向其他執行緒發出停止訊號,只需要向執行緒傳入coord物件就行
    # 該類一般有should_stop, request_stop, join三個方法,分別是是否停止、命令停止、等待停止

    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    for _ in range(3): print(sess.run(out_tensor)[0])  # 出三次佇列

    coord.request_stop()  # 命令所有的執行緒停止

    coord.join(threads)  # 等待所有執行緒終止