我有一个for循环,我正在尝试使用joblib进行并行化(我也尝试过dask获得相同的结果)。在循环内部,调用了一系列顺序函数-其中一些是从其他一些函数中调用的。
循环正在使用OCR从多页pdf中提取文本。如果pdf只是几页(我测试过的只有4页),则并行化循环似乎有好处。但是,似乎当pdf较长(例如15页)时,它比没有任何并行化的情况要慢得多。
以下是我的一些代码段:
def _extract_all_label_values(i, page_image_and_contours):
try:
page_label_values = _extract_label_values(page_image_and_contours[0], page_image_and_contours[1])
for element in page_label_values:
element['page'] = i
return page_label_values
except:
return None
def _extract_label_values(image, contours):
offset = 10
close_labels = _get_close_labels(contours, offset)
label_values = _get_label_value(image, contours, close_labels, offset)
label_values = _check_extracted(image, label_values, offset)
return label_values
page_images_and_countours = preprocessor.run(pdf_path)
num_cores = multiprocessing.cpu_count()
parallel_function = Parallel(n_jobs=num_cores, prefer='threads')
elements = parallel_function(
delayed(_extract_all_label_values)(i, page_image_and_countours)
for i, page_image_and_countours in page_images_and_countours.items()
)
其中一些功能非常复杂,并且包含其他for循环,甚至还有一些嵌套的for循环。
我将joblib设置为使用线程,因为在尝试其他方法时,我不断收到有关突然终止的错误。