From 5d4f56d4fa9d245149206ad1afb6fe71a8cd8a2c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 6 Apr 2025 14:05:32 +0530 Subject: [PATCH] Handle empty iterables --- src/calibre/utils/forked_map.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/calibre/utils/forked_map.py b/src/calibre/utils/forked_map.py index b3cef9161e..c12627e56b 100644 --- a/src/calibre/utils/forked_map.py +++ b/src/calibre/utils/forked_map.py @@ -117,6 +117,8 @@ def forked_map(fn: Callable[[T], R], iterable: T, *iterables: T, timeout: int | system libraries. ''' num_items = len(iterable) + sum(map(len, iterables)) + if num_items < 1: + return if num_workers <= 0: num_workers = max(1, min(num_items, os.cpu_count())) chunk_size = max(1, num_items // num_workers) @@ -151,11 +153,11 @@ def forked_map(fn: Callable[[T], R], iterable: T, *iterables: T, timeout: int | pos += 1 else: cache[result.id] = result + if count < num_items: + raise OSError(f'Forked workers exited producing only {count} out of {num_items} results') while r := cache.pop(pos, None): yield r.value pos += 1 - if pos < num_items: - raise OSError(f'Forked workers exited producing only {pos} out of {len(iterables)} results') forked_map_is_supported = hasattr(os, 'fork')