Tensorflow: 佇列與執行緒
阿新 • • 發佈:2018-12-13
執行緒協同管理
# 利用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) # 等待所有執行緒終止