python 基础入门升级版 第五课作业


作业
使用线程池实现对50个文本进行单词出现频率统计并汇总结果(可以自己写个随机文本产生器)
读取文本文件,将全部内容倒序后写入新文件。

没想明白怎么用线程池,或者说,调用线程池里的任务时,怎么接受每个任务的结果~我用了一个全局变量去接收,但是结果不对,因此先用多线程的方法实现,线程池的应用,我在想想~

多线程的应用

import random
import threading

WORDS = ['Those', 'are' 'ants', 'answered', 'his', 'friend', 'We', 'still', 'on', 'the', 'ground']
word = []
words = []
while len(word) < 50:
    flag = random.randint(0, (len(WORDS) - 1))
    word.append(WORDS[flag])

for i in range(5):
    Words = word[i * 10:(i + 1) * 10]
    words.append(Words)
print(words)  # 随机生成了50个文本

统计单词出现的次数

def countS(data):
    wordscount = {}
    for i in data:
        if i in wordscount:
            wordscount[i] += 1
        else:
            wordscount[i] = 1
    temp_result[threading.current_thread().name] = wordscount

采用多线程来统计50个文本中,每个单词出现的次数!

temp_result = {}

pool = threadpool.ThreadPool(4)

tasks = threadpool.makeRequests()

threads = []
for i in range(len(words)):
    t = threading.Thread(target=countS, name=str(i), args=(words[i],))
    threads.append(t)

for t in threads:
    t.start()
for t in threads:
    t.join()

print('---------------'*3)

print(temp_result)

print('-------------------'*3)

temp_result['0']

result = {}
for k, v in temp_result.items():
    for ke, va in v.items():
        if ke in result:
            result[ke] += va
        else:
            result[ke] = va
            
print(result)
已邀请:

要回复问题请先登录注册

返回顶部