multiprocessing 多进程的的方式读取一个目录下的几百万文件, 程序运行的前 10 几秒能快速处理完大约 100W 文件,然后性能急剧下降,每秒中只能处理几百个文件了,百思不得其解啊。 多次运行程序都是会在 100W 左右变慢,机器 64G 内存,8 核 16 线程,机器压力不算大
代码如下:
import traceback from multiprocessing import Pool, Queue, Process
def producer(path): try: with open(path) as f: for line in f: if line.startswith('<title>'): global bug buf.put(u'{0}\t{1}'.format(path, line).encode('utf-8')) break except: traceback.print_exc() print path
def consumer(buf): with open('baidu_wiki_title.tsv', 'w') as out: while True: try: line = buf.get(timeout=30) out.write(line) except: pass
def generate(): with open('wiki.txt') as f: count = 0 for line in f: count += 1 if count % 10000==0: print count yield 'wiki/' + line.strip().split()[-1]
buf = Queue(10000000) p = Process(target=consumer, args=(buf,)) p.start() pool = Pool(100) pool.imap(producer, list(generate())) pool.close() pool.join()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.