我正在尝试加快在 python 中处理文件所需的时间。我的想法是将任务分成n个线程。
例如,如果我有一个包含 1300 个项目的文件。我希望每个线程处理每第 n 个项目。每个项目都不依赖于任何其他项目,因此这里的顺序无关紧要
所以每个线程的工作流程都是这样的:
1) open file
2) iterate through items
3) if nth item then process, otherwise continue
我正在使用线程库来执行此操作,但我没有看到任何性能改进。
这是伪代码:
def driver(self):
threads = []
# Just picked 10 as test so trying to create 10 threads
for i in range(0,10):
threads.append(threading.Thread(target=self.workerFunc, args=(filepath, i, 10)))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
def workerFunc(self, filepath):
with open(filepath, 'rb') as file:
obj = ELFFile(file)
for item in obj.items:
if (item is not nth item):
continue
else:
process this item
由于每个线程都只是在读取文件,它应该能够自由地扫描文件,而不用关心其他线程在做什么或被它们阻塞,对吧?
我在这里俯瞰什么?
我唯一能想到的是我用来格式化这些文件的库(pyelftool ELFFile)有一些内部阻塞但我找不到它。还是我的计划存在根本缺陷?
编辑:请注意,我正在运行它的系统上有 32 个 CPU