Python中的多进程,每个进程处理文件的部分
我有一个文件想用Python来处理。这个文件里的每一行都是一张图片的路径,我想对每张图片调用一个特征提取的算法。
我想把这个文件分成几个小块,然后每一块都在不同的进程中同时处理。请问在Python中,有哪些好的库或者解决方案可以实现这种多进程处理呢?
1 个回答
4
你的描述表明,使用一个简单的线程池(或进程池)应该可以解决问题:
#!/usr/bin/env python
from multiprocessing.dummy import Pool # thread pool
from tqdm import tqdm # $ pip install tqdm # simple progress report
def mp_process_image(filename):
try:
return filename, process_image(filename), None
except Exception as e:
return filename, None, str(e)
def main():
# consider every non-blank line in the input file to be an image path
image_paths = (line.strip()
for line in open('image_paths.txt') if line.strip())
pool = Pool() # number of threads equal to number of CPUs
it = pool.imap_unordered(mp_process_image, image_paths, chunksize=100)
for filename, result, error in tqdm(it):
if error is not None:
print(filename, error)
if __name__=="__main__":
main()
我假设 process_image()
是一个需要大量计算的任务,并且它会释放全局解释器锁(GIL),也就是说,它的主要工作是在像 OpenCV 这样的 C 扩展中完成的。如果 process_image()
没有释放 GIL,那就把 Pool
导入中的 .dummy
去掉,这样就可以使用进程而不是线程了。