-
Notifications
You must be signed in to change notification settings - Fork 353
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chunked filter #344
Comments
Hey Raphael! So, (something like: from boltons.iterutils import chunked_iter
key = lambda chunk: [bool(x%2) for x in chunk]
vals = list(range(20))
chunk_size = 5
filtered_chunked = (x for chunk in chunked_iter(vals, chunk_size) for x, allow in zip(chunk, key(chunk)) if allow)
# list(filtered_chunked) -> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] If it's this annoying, I'm generally for including it. What do you think of the simplified expression above? You'll definitely want to use The input iterable is flat, and the output iterable is flat, so that dimensionality matches, and there's no need for a We'll also need a nice, demonstrative docstring. What's your motivating example in this case? Are there a lot of APIs where this batch nature applies? Thanks again! |
I'm happy with a generator expression, I'd just split it in lines and use a nicer variable name for my PR.
My code is looking for resources that exist in one API but not in another one. Both APIs use paging, have limits on query length, and allow for The code goes over an iterator (generator) of results of the first API (paged, but that's hidden in the generator), takes the objects' ids and searches them in the second API. Whatever is returned can be discarded from the input as processed in previous runs. Searching step is wrapped in a batch predicate and used in chunked_filter. One alternative would collecting all the objects in multiple fetches, but that would only increase memory footprint, and still the list would need to be chunked for the second API. Another alternative would be fetching each resource in a separate query, but that would add time overhead from IO and API rate limits.
Not sure how to answer your question. |
Something like |
Is boltons a good home for a filter_chunked function?
It behaves similar to filter(), except the predicate is called with chunks of input. It's useful the predicate must make calls to external services, but can do it in batches.
The text was updated successfully, but these errors were encountered: