更新
This commit is contained in:
@@ -87,20 +87,29 @@ class AccountReplyQueue:
|
||||
details: Optional[dict[str, Any]] = None,
|
||||
merge_key: str = "",
|
||||
merge_keys: Optional[Iterable[str]] = None,
|
||||
immediate_if_idle: bool = False,
|
||||
) -> int:
|
||||
"""Append one reply job and return its current 1-based queue position."""
|
||||
"""Append one reply job and return its current 1-based queue position.
|
||||
|
||||
When ``immediate_if_idle`` is enabled, the first job in a completely
|
||||
idle account queue reserves a zero-second slot. Jobs arriving behind
|
||||
it still reserve the configured interval, so the normal per-account
|
||||
pacing resumes from the second job onward.
|
||||
"""
|
||||
interval = max(0.0, float(delay_seconds or 0))
|
||||
loop = asyncio.get_running_loop()
|
||||
async with self._state_lock:
|
||||
if not self._running or not self._task or self._task.done():
|
||||
raise RuntimeError("reply queue is not running")
|
||||
due_at = max(loop.time(), self._tail_due_at) + interval
|
||||
queue_is_idle = self.pending_count == 0
|
||||
slot_seconds = 0.0 if immediate_if_idle and queue_is_idle else interval
|
||||
due_at = max(loop.time(), self._tail_due_at) + slot_seconds
|
||||
self._tail_due_at = due_at
|
||||
self._waiting.append(
|
||||
_QueueItem(
|
||||
job_id=uuid.uuid4().hex,
|
||||
due_at=due_at,
|
||||
slot_seconds=interval,
|
||||
slot_seconds=slot_seconds,
|
||||
callback=callback,
|
||||
description=description,
|
||||
queued_at=time.time(),
|
||||
@@ -256,9 +265,10 @@ class AccountReplyQueue:
|
||||
item = self._waiting.pop(selected_index)
|
||||
shift_seconds = max(0.0, item.slot_seconds)
|
||||
shifted_count = 0
|
||||
for later in self._waiting[selected_index:]:
|
||||
later.due_at -= shift_seconds
|
||||
shifted_count += 1
|
||||
if shift_seconds > 0:
|
||||
for later in self._waiting[selected_index:]:
|
||||
later.due_at -= shift_seconds
|
||||
shifted_count += 1
|
||||
|
||||
item.due_at = asyncio.get_running_loop().time()
|
||||
item.expedited = True
|
||||
|
||||
Reference in New Issue
Block a user