import threading
import time
import tensorflow as tf
from pprint import pprint

sess = tf.InteractiveSession()

# FIFOQueue에 넣을 데이터 생성: -0.81226367과 같이 하나의 값만 출력됨
gen_random_normal = tf.random_normal(shape=()) 
# FIFOQueue 정의
queue = tf.FIFOQueue(capacity=100, dtypes=[tf.float32], shapes=())
enque = queue.enqueue(gen_random_normal)

# sess.run()을 여러번 호출하여
# FIFOQueue에 10개의 아이템을 더하는 함수
def add():
    for i in range(10):
        sess.run(enque)

# 10개의 스레드를 생성
threads = [threading.Thread(target=add, args=()) for i in range(10)]

print('threads:')
pprint(threads)

# FIFOQueue 의 크기가 100이 될때까지 확인
for t in threads:
    t.start()
    
print('='*30)
print('check queue.size():')
print(sess.run(queue.size()))
time.sleep(0.003)
print(sess.run(queue.size()))
time.sleep(0.003)
print(sess.run(queue.size()))

# dequeue_many()를 이용해 10개 아이템 출력
x = queue.dequeue_many(10)
print('='*30)
print('queue.dequeue_many(10):')
print(x.eval())
sess.run(queue.size())