Как уже упоминалось в моем вопросе, ProcessPoolExecutor имеет свою собственную внутреннюю очередь, которая не ограничена. Однако ProcessPoolExecutor._queue_count подсчитывает количество активных запросов (запущено + ожидающих).
Для меня ограничено, просто создайте оболочку поверх ProcessPoolExecutor, чтобы проверить счетчик и выдать некоторое исключение времени выполнения, если число превышает желаемый максимальный размер очереди:
self._max_queue_size = self._max_workers + max_queue_size
а затем:
def submit(self, fn, *args, **kwargs) -> Future:
if self._executor._queue_count >= self._max_queue_size:
raise RuntimeError(
f"{self.__class__.__name__} has reached its maximum of "
f"{self._max_queue_size} active (running + queued) requests.")
return self._executor.submit(fn, *args, **kwargs)
Возможно, это не самое лучшее и чистое решение, но оно, безусловно, сработало для меня.