我想发出一个命令,并行地搜索给定数量的文件以获取一个给定的单词,其中.
ppatternsearch [-p n] word {files}ppatternsearch是命令名-p是一个定义并行化级别的选项。n是-p选项将为单词搜索创建的进程/线程数。word是我要寻找的词files是我将要搜索的文件。我想用两种方式来做这件事,一种是用processes,另一种是用threads。最后,父进程/主线程返回它找到正在搜索的单词的行数。
问题是,我已经开发了一些代码,我撞到了墙。我不知道从这里往哪里走。
import argparse, os, sys, time
num_lines_with_pattern = []
def pattern_finder(pattern, file_searched):
counter = 0
with open(file_searched, 'r') as ficheiro_being_read:
for line in ficheiro_being_read:
if pattern in line:
print line
counter += 1
num_lines_with_pattern.append(counter)
parser = argparse.ArgumentParser()
parser.add_argument('-p', type = int, default = 1, help = Defines command parallelization.')
args = parser.parse_args()发布于 2015-11-07 20:26:49
下一步是导入threading或multiprocessing,并按适当次数启动pattern_finder。
您可能还想查看queue.Queue,这样您的结果就不会被打印得乱七八糟。
发布于 2015-11-07 22:28:33
问题可能是I/O绑定,因此引入多个线程/进程不会使硬盘工作得更快。
不过应该很容易查到。使用进程池运行pattern_finder():
#!/usr/bin/env python
from functools import partial
from multiprocessing import Pool, cpu_count
def pattern_finder(pattern, file_searched):
...
return file_searched, number_of_lines_with_pattern
if __name__ == "__main__":
pool = Pool(n or cpu_count() + 1)
search = partial(pattern_finder, word)
for filename, count in pool.imap_unordered(search, files):
print("Found {count} lines in {filename}".format(**vars()))https://stackoverflow.com/questions/33582315
复制相似问题