The type of the limiters may be changed from Limiter to Callable[[Dict[str, Any]], Optional[str]] as the Limiter objects also conform to this type. The rationale is that many users may be more comfortable writing functions than classes.
Even better solution would be for limiters to return Iterable[str]. This way the scheduler would be able to skip to the next runner if one is not available.
The type of the limiters may be changed from
Limiter
toCallable[[Dict[str, Any]], Optional[str]]
as theLimiter
objects also conform to this type. The rationale is that many users may be more comfortable writing functions than classes.