Make Python functions safe to run more than once
Project description
runguard
Make Python functions safe to run more than once.
runguard ensures a function only executes once within a given time window
(e.g. once per day, per hour, or per input) — even across multiple processes.
Why?
In real systems, the same function can get called multiple times:
- retries
- cron jobs
- API triggers
- AI-generated scripts
- accidental double execution
This can lead to:
- duplicate DB writes
- repeated API calls
- inconsistent state
runguard prevents that with a simple decorator.
Install
pip install runguard # (or drop the file into your project)
Quick Example
from runguard import guard
@guard(schedule="daily")
def generate_report(user_id):
print("Running expensive job...")
return {"user": user_id}
generate_report(1)
generate_report(1) # skipped
generate_report(2) # runs (different input)
Features
- Runs once per time window (daily, hourly, weekly, or custom TTL)
- Parameter-aware (per input)
- Cross-process safe (file locking, works on Windows & Unix)
- Returns cached result
- Zero infrastructure required
Schedules
Daily / Hourly / Weekly
@guard(schedule="daily")
@guard(schedule="hourly")
@guard(schedule="weekly")
Custom TTL
@guard(ttl_seconds=600) # once every 10 minutes
Intended Usage
- scripts that may be triggered multiple times
- cron jobs / schedulers
- API endpoints with side effects
- anything that “should not run twice”
Future Improvements
- SQLite / Redis backend
- async support
- manual invalidation
- "run but don’t cache result" mode
Notes
runguard is not a framework.
It’s a small, reliable utility to make unsafe execution safe by default.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file runguard-0.2.0.tar.gz.
File metadata
- Download URL: runguard-0.2.0.tar.gz
- Upload date:
- Size: 3.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b44cf89d3be608b42f6d5f5dbf0fe0bfb281bcb2d6f66fc84b87b6464b431d16
|
|
| MD5 |
0fd6d4e0afea1b671739773ed7d6e1d9
|
|
| BLAKE2b-256 |
e2addeba92d133d39bed082bd32cd376b568ec41b1eacd33bd589566be457bb3
|
File details
Details for the file runguard-0.2.0-py3-none-any.whl.
File metadata
- Download URL: runguard-0.2.0-py3-none-any.whl
- Upload date:
- Size: 3.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
047af0322220fd5357704afa359b26ccf28bd2dd7fa518e2de89a4575216fd10
|
|
| MD5 |
908bce51fc4784884c95877080ec47d6
|
|
| BLAKE2b-256 |
63f768ef6c17da078797b73390c09423be9b03313e7edb9dcd3d9c57822d6eb3
|