Skip to content

Commit 61cc759

Browse files
committed
Use relative delay (seconds) instead of absolute scheduled_time
Change scheduling parameter from absolute datetime to relative seconds: - Rename scheduled_time to delay (float, seconds from now) - Uses database server time (NOW() + INTERVAL) to avoid clock sync issues - Update all examples to use delay parameter
1 parent 314ad0a commit 61cc759

1 file changed

Lines changed: 14 additions & 18 deletions

File tree

docs/src/design/autopopulate-2.0-spec.md

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class JobsTable(Table):
149149
def refresh(
150150
self,
151151
*restrictions,
152-
scheduled_time: datetime = None,
152+
delay: float = 0,
153153
priority: int = 5,
154154
stale_timeout: float = None
155155
) -> dict:
@@ -163,9 +163,9 @@ class JobsTable(Table):
163163
164164
Args:
165165
restrictions: Conditions to filter key_source
166-
scheduled_time: When new jobs should become available for processing.
167-
Default: now (jobs are immediately available).
168-
Use future times to schedule jobs for later processing.
166+
delay: Seconds from now until jobs become available for processing.
167+
Default: 0 (jobs are immediately available).
168+
Uses database server time to avoid client clock synchronization issues.
169169
priority: Priority for new jobs (lower = more urgent). Default: 5
170170
stale_timeout: Seconds after which pending jobs are checked for staleness.
171171
Jobs older than this are removed if their key is no longer
@@ -301,11 +301,9 @@ MyTable.jobs.progress() # Returns detailed status breakdown
301301

302302
### Priority and Scheduling
303303

304-
Priority and scheduling are handled via `refresh()` parameters. Lower priority values are more urgent (0 = highest priority).
304+
Priority and scheduling are handled via `refresh()` parameters. Lower priority values are more urgent (0 = highest priority). Scheduling uses relative time (seconds from now) based on database server time.
305305

306306
```python
307-
from datetime import datetime, timedelta
308-
309307
# Add urgent jobs (priority=0 is most urgent)
310308
MyTable.jobs.refresh(priority=0)
311309

@@ -316,12 +314,13 @@ MyTable.jobs.refresh()
316314
MyTable.jobs.refresh(priority=10)
317315

318316
# Schedule jobs for future processing (2 hours from now)
319-
future_time = datetime.now() + timedelta(hours=2)
320-
MyTable.jobs.refresh(scheduled_time=future_time)
317+
MyTable.jobs.refresh(delay=2*60*60) # 7200 seconds
318+
319+
# Schedule jobs for tomorrow (24 hours from now)
320+
MyTable.jobs.refresh(delay=24*60*60)
321321

322-
# Combine: urgent jobs scheduled for tonight
323-
tonight = datetime.now().replace(hour=22, minute=0, second=0)
324-
MyTable.jobs.refresh(priority=0, scheduled_time=tonight)
322+
# Combine: urgent jobs with 1-hour delay
323+
MyTable.jobs.refresh(priority=0, delay=3600)
325324

326325
# Add urgent jobs for specific subjects
327326
MyTable.jobs.refresh(Subject & 'priority="urgent"', priority=0)
@@ -532,13 +531,10 @@ FilteredImage.populate(reserve_jobs=True)
532531
### Scheduled Processing
533532

534533
```python
535-
# Schedule jobs for overnight processing
536-
from datetime import datetime, timedelta
537-
538-
tonight = datetime.now().replace(hour=22, minute=0, second=0)
539-
FilteredImage.jobs.refresh('subject_id > 100', scheduled_time=tonight)
534+
# Schedule jobs for overnight processing (8 hours from now)
535+
FilteredImage.jobs.refresh('subject_id > 100', delay=8*60*60)
540536

541-
# Only jobs scheduled for now or earlier will be processed
537+
# Only jobs whose scheduled_time <= now will be processed
542538
FilteredImage.populate(reserve_jobs=True)
543539
```
544540

0 commit comments

Comments
 (0)