3333from duron ._loop import EventLoop , create_loop
3434from duron .codec import Codec , JSONValue
3535from duron .log import derive_id , is_entry , random_id , set_annotations
36- from duron .tracing import (
37- Tracer ,
38- current_tracer ,
39- )
36+ from duron .tracing import Tracer , current_tracer
4037from duron .tracing ._span import NULL_SPAN
4138from duron .typing import Unspecified , inspect_function
4239
@@ -361,12 +358,13 @@ async def close(self) -> None:
361358 await self ._task_manager .close ()
362359
363360 def now (self ) -> int :
364- if self ._running :
365- t = time .time_ns ()
366- t //= 1_000
367- self ._now = max (self ._now + 1 , t )
368361 return self ._now
369362
363+ def tick_realtime (self ) -> None :
364+ t = time .time_ns ()
365+ t //= 1_000
366+ self ._now = max (self ._now + 1 , t )
367+
370368 async def resume (self ) -> None :
371369 self ._lease = await self ._log .acquire_lease ()
372370 recvd_msgs : set [str ] = set ()
@@ -400,6 +398,7 @@ async def run(self) -> object:
400398 await self ._send_traces ()
401399 else :
402400 await waitset .block (self .now ())
401+ self .tick_realtime ()
403402
404403 # cleanup
405404 self ._loop .close ()
@@ -409,8 +408,9 @@ async def run(self) -> object:
409408 return self ._task .result ()
410409
411410 async def _step (self ) -> WaitSet | None :
411+ self ._loop .tick (self .now ())
412+
412413 while True :
413- self ._loop .tick (self .now ())
414414 result = self ._loop .poll_completion (self ._task )
415415 if result is None :
416416 return result
0 commit comments