在python中使用giant或regex是低效的吗?

2024-03-28 08:43:15 发布

您现在位置:Python中文网/ 问答频道 /正文

简单的问题是,在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,因此多个线程可以同时在同一个文件上工作。磁盘访问基本上会把我逼到多线程毫无用处的地步吗?你知道吗


Tags: 文件in脚本列表contents条目线程形式
3条回答

Also is this a good way to multithread?

不是真的。你知道吗

Will disk access basically bottelneck me to the point where multithreading is useless?

正确。你知道吗

您可能需要仔细查看multiprocessing。你知道吗

  1. 工作者Process应该OS.步行并将文件名放入队列中。

  2. 工人Process实例池。每个人都将从队列中获取一个文件名,打开它,检查签名,并将结果分为“好”队列和“坏”队列。创建尽可能多的这些,使CPU 100%繁忙。

  3. 另一个workerProcess实例可以将好的条目出列并记录它们。

  4. 另一个worker Process实例可以将坏条目出列,并删除或重命名或任何应该发生的事情。这会干扰os.步行. 一种可能性是将这些记录到一个“DothisNext”文件中,该文件在os.步行完成了。

不要担心优化。你知道吗

50个数据点与你的计算机所能管理的相比是很小的,所以你可能会浪费很多时间,使你的程序更复杂。你知道吗

这将取决于你使用的机器。如果你使用机器的最大容量,它当然会减速。我想最好的办法就是试试看。你知道吗

相关问题 更多 >