import threading
import queue
from cppy.cp_util import *

# 处理单词
def process_words(word_space, freq_space, stopwords):
    word_freqs = {}
    while True:
        try:
            word = word_space.get(timeout=1)
        except queue.Empty:
            break
        count_word(word, word_freqs, stopwords)
    freq_space.put(word_freqs)

# 创建并启动线程
def start_threads(word_space, freq_space, stopwords):
    workers = []
    for i in range(5):
        worker = threading.Thread(target=process_words, 
                                  args=(word_space, freq_space, stopwords))
        worker.start()
        workers.append(worker)
    return workers


if __name__ == "__main__":    
    stopwords = get_stopwords()
    word_space = queue.Queue()
    freq_space = queue.Queue()

    # 将数据压入 word_space
    for word in extract_file_words(testfilepath):
        word_space.put(word)

    # 创建并启动线程
    workers = start_threads(word_space, freq_space, stopwords)

    # 等待所有线程完成
    for worker in workers:  worker.join()

    # 合并处理结果
    word_freqs = {}
    while not freq_space.empty():
        freqs = freq_space.get()
        for (k, v) in freqs.items():
            word_freqs[k] = word_freqs.get(k,0) + v            
    
    # 打印
    print_word_freqs ( sort_dict (word_freqs) )