suitkaise

        
Your function works exactly as before.
But now you have superpowers.
.asynced()
Make it async, automatically
.background()
Run it in a thread, get a Future
.retry(N)
Retry up to N times with backoff
.timeout(N)
Kill it if it takes too long
.rate_limit(N)
Throttle to N calls per second
No rewrites. Just call it differently.
Make any function async

            
Run anything in the background

            
Same function definition.
Chain any combination. Order doesn't matter.

        
Execution order is always consistent:
rate limit → retry → timeout → call
One decorator. Five cool things.

        
Define once. Modify anywhere. Chain everything.