''' 使用 multiprocessing.Manager: Manager 提供了一个可以在不同进程之间共享和修改的数据类型,如 list, dict, Namespace 等。 它实际上是在背后启动了一个单独的服务器进程,其他进程通过代理来访问这些共享对象。 ''' # 使用 multiprocessing.Manager 来完成统计词频 # 怎么得到最快的一个结果,是一个试错过程:X程创建数目多少、分片的大小 ... from cppy.cp_util import * from collections import Counter from multiprocessing import Manager, Process stop_words = get_stopwords() def process_chunk(chunk,word_count): words = [ w for w in chunk if ( not w in stop_words ) and len(w) >= 3 ] for word in words: # 非常化时间 word_count[word] = word_count.get(word, 0) + 1 # word_count.update( Counter(words) ) # 类型不起作用 @timing_decorator def main(): manager = Manager() word_count = manager.dict() chunks = get_chunks(testfilepath,2800) print('-------------------',len(chunks)) processes = [] for chunk in chunks: p = Process(target=process_chunk, args=(chunk,word_count) ) processes.append(p) p.start() for p in processes: p.join() word_count = dict(word_count) word_freqs = Counter(word_count).most_common(10) print_word_freqs(word_freqs) if __name__ == '__main__': main()