Skip to content

Commit 40f5579

Browse files
megalarenAleksei Briushinin
andauthored
Fix task delay for specific time with milliseconds (#404)
Co-authored-by: Aleksei Briushinin <[email protected]>
1 parent fec9633 commit 40f5579

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

taskiq/cli/scheduler/run.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,15 @@ def get_task_delay(task: ScheduledTask) -> Optional[int]:
9494
return 0
9595
return None
9696
if task.time is not None:
97-
task_time = to_tz_aware(task.time).replace(microsecond=0)
97+
task_time = to_tz_aware(task.time)
9898
if task_time <= now:
9999
return 0
100100
one_min_ahead = (now + timedelta(minutes=1)).replace(second=1, microsecond=0)
101101
if task_time <= one_min_ahead:
102-
return int((task_time - now).total_seconds())
102+
delay = task_time - now
103+
if delay.microseconds:
104+
return int(delay.total_seconds()) + 1
105+
return int(delay.total_seconds())
103106
return None
104107

105108

tests/cli/scheduler/test_task_delays.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,21 @@ def test_time_delay() -> None:
124124
),
125125
)
126126
assert delay is not None and delay == 15
127+
128+
129+
@freeze_time("2023-01-14 12:00:00.05")
130+
def test_time_delay_with_milliseconds() -> None:
131+
time = datetime.datetime.now(tz=pytz.UTC) + datetime.timedelta(
132+
seconds=15,
133+
milliseconds=150,
134+
)
135+
delay = get_task_delay(
136+
ScheduledTask(
137+
task_name="",
138+
labels={},
139+
args=[],
140+
kwargs={},
141+
time=time,
142+
),
143+
)
144+
assert delay is not None and delay == 16

0 commit comments

Comments
 (0)