简单的问题是,在python中使用giant或regex是低效的。我正在构建一个脚本来搜索坏文件。到目前为止,我有一个包含50个左右“签名”的源文件。列表的形式如下:
Djfsid
LJflsdflsdf
fjlsdlf
fsdf
.
.
.
没有真正的“一致性”,所以通过删除“重复项”或检查“一个条目是另一个条目的子字符串”来优化列表不会有多大作用。你知道吗
我基本上不想操作系统走下一个目录,打开一个文件,检查签名,关闭和移动。你知道吗
为了加快速度,我将把列表分成50/n个不同的子列表,其中n是核心数,让一个线程处理列表中的几个条目。你知道吗
使用巨型regex re.search('(entry1|entry2|entry3....|entryK)', FILE_CONTENTS)
或巨型regex for i in xrange(0,NUM_SUBENTRIES)...if subentry[i] in FILE_CONTENTS...
会更好吗?你知道吗
这也是多线程的好方法吗?这是unix,因此多个线程可以同时在同一个文件上工作。磁盘访问基本上会把我逼到多线程毫无用处的地步吗?你知道吗
不是真的。你知道吗
正确。你知道吗
您可能需要仔细查看
multiprocessing
。你知道吗工作者
Process
应该OS.步行并将文件名放入队列中。工人
Process
实例池。每个人都将从队列中获取一个文件名,打开它,检查签名,并将结果分为“好”队列和“坏”队列。创建尽可能多的这些,使CPU 100%繁忙。另一个worker
Process
实例可以将好的条目出列并记录它们。另一个worker
Process
实例可以将坏条目出列,并删除或重命名或任何应该发生的事情。这会干扰os.步行. 一种可能性是将这些记录到一个“DothisNext”文件中,该文件在os.步行完成了。不要担心优化。你知道吗
50个数据点与你的计算机所能管理的相比是很小的,所以你可能会浪费很多时间,使你的程序更复杂。你知道吗
这将取决于你使用的机器。如果你使用机器的最大容量,它当然会减速。我想最好的办法就是试试看。你知道吗
相关问题 更多 >
编程相关推荐