Skip to content

Commit

Permalink
Fix task delay for specific time with milliseconds (#404)
Browse files Browse the repository at this point in the history
Co-authored-by: Aleksei Briushinin <[email protected]>
  • Loading branch information
megalaren and Aleksei Briushinin authored Feb 4, 2025
1 parent fec9633 commit 40f5579
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
7 changes: 5 additions & 2 deletions taskiq/cli/scheduler/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,15 @@ def get_task_delay(task: ScheduledTask) -> Optional[int]:
return 0
return None
if task.time is not None:
task_time = to_tz_aware(task.time).replace(microsecond=0)
task_time = to_tz_aware(task.time)
if task_time <= now:
return 0
one_min_ahead = (now + timedelta(minutes=1)).replace(second=1, microsecond=0)
if task_time <= one_min_ahead:
return int((task_time - now).total_seconds())
delay = task_time - now
if delay.microseconds:
return int(delay.total_seconds()) + 1
return int(delay.total_seconds())
return None


Expand Down
18 changes: 18 additions & 0 deletions tests/cli/scheduler/test_task_delays.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,21 @@ def test_time_delay() -> None:
),
)
assert delay is not None and delay == 15


@freeze_time("2023-01-14 12:00:00.05")
def test_time_delay_with_milliseconds() -> None:
time = datetime.datetime.now(tz=pytz.UTC) + datetime.timedelta(
seconds=15,
milliseconds=150,
)
delay = get_task_delay(
ScheduledTask(
task_name="",
labels={},
args=[],
kwargs={},
time=time,
),
)
assert delay is not None and delay == 16

0 comments on commit 40f5579

Please sign in to comment.