You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Using time.sleep inside async retry blocks the event loop; replace with await asyncio.sleep for non-blocking backoff.
asyncdefretry_with_backoff(func, max_retries=3):
ifmax_retries<1:
raiseValueError("max_retries must be at least 1")
last_exception=Noneforattemptinrange(max_retries):
try:
returnawaitfunc()
exceptExceptionase:
last_exception=eifattempt<max_retries-1:
time.sleep(0.0001*attempt)
Logic prefers throughput when runtime improvement is <= 0; verify that negative runtime change with small throughput gain should still override and that messaging stays consistent across outputs.
@propertydefperf_improvement_line(self) ->str:
runtime_improvement=self.speedupif (
self.original_async_throughputisnotNoneandself.best_async_throughputisnotNoneandself.original_async_throughput>0
):
throughput_improvement=throughput_gain(
original_throughput=self.original_async_throughput,
optimized_throughput=self.best_async_throughput,
)
# Use throughput metrics if throughput improvement is better or runtime got worseifthroughput_improvement>runtime_improvementorruntime_improvement<=0:
throughput_pct=f"{throughput_improvement*100:,.0f}%"throughput_x=f"{throughput_improvement+1:,.2f}x"returnf"{throughput_pct} improvement ({throughput_x} faster)."returnf"{self.speedup_pct} improvement ({self.speedup_x} faster)."
Replace the blocking sleep with asyncio.sleep to avoid blocking the event loop in an async function. Also make the initial delay non-zero to ensure a minimal backoff delay.
async def retry_with_backoff(func, max_retries=3):
if max_retries < 1:
raise ValueError("max_retries must be at least 1")
last_exception = None
for attempt in range(max_retries):
try:
return await func()
except Exception as e:
last_exception = e
if attempt < max_retries - 1:
- time.sleep(0.0001 * attempt)+ await asyncio.sleep(0.0001 * max(1, attempt))
raise last_exception
Suggestion importance[1-10]: 8
__
Why: The function retry_with_backoff is async but uses blocking time.sleep, which can stall the event loop; replacing with await asyncio.sleep(...) is correct and impactful for async correctness. The improved code aligns with the PR context and imports asyncio are present.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Type
Enhancement, Tests
Description
Add async retry with backoff utility
Report async throughput gains in outputs
Propagate throughput metrics across pipeline
Update async end-to-end test target
Diagram Walkthrough
File Walkthrough
main.py
Add async retry_with_backoff helpercode_to_optimize/code_directories/async_e2e/main.py
retry_with_backoff(func, max_retries)max_retriesand handle exceptionsfunction_optimizer.py
Surface and propagate async throughput metricscodeflash/optimization/function_optimizer.py
explanation.py
Prefer throughput in explanation and outputcodeflash/result/explanation.py
critic.py
Tidy critic logging for throughput gainscodeflash/result/critic.py
end_to_end_test_async.py
Update async E2E test to new targettests/scripts/end_to_end_test_async.py
main.pyretry_with_backoff