mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-10 06:10:50 +08:00
- enable user db - fix main_pre order everywhere - fix absolute to relative imports everywhere - async better supported
145 lines
4.3 KiB
Python
145 lines
4.3 KiB
Python
from __future__ import annotations
|
|
|
|
import typing
|
|
from abc import ABCMeta, abstractmethod
|
|
|
|
from .executor_types import HistoryResultDict
|
|
from .queue_types import QueueTuple, HistoryEntry, QueueItem, Flags, ExecutionStatus, TaskInvocation, AbstractPromptQueueGetCurrentQueueItems
|
|
|
|
|
|
class AbstractPromptQueue(metaclass=ABCMeta):
|
|
"""
|
|
The interface of a queue inside ComfyUI.
|
|
|
|
put is intended to be used by a prompt creator.
|
|
|
|
get is intended to be used by a worker.
|
|
"""
|
|
|
|
@abstractmethod
|
|
def size(self) -> int:
|
|
"""
|
|
The number of items currently in the queue. Excludes items being processed.
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def put(self, item: QueueItem):
|
|
"""
|
|
Puts an item on the queue. Does not block or wait
|
|
:param item: a queue item
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get(self, timeout: float | None = None) -> typing.Optional[typing.Tuple[QueueTuple, str]]:
|
|
"""
|
|
Pops an item off the queue. Blocking. If a timeout is provided, this will return None after
|
|
:param timeout: the number of seconds to time out for a blocking get
|
|
:return: the queue tuple and its item ID, or None if timed out or no item is on the queue
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def task_done(self, item_id: str, outputs: HistoryResultDict,
|
|
status: typing.Optional[ExecutionStatus]):
|
|
"""
|
|
Signals to the user interface that the task with the specified id is completed
|
|
:param item_id: the ID of the task that should be marked as completed
|
|
:param outputs: an opaque dictionary of outputs
|
|
:param status:
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_current_queue(self) -> AbstractPromptQueueGetCurrentQueueItems:
|
|
"""
|
|
Gets the current state of the queue
|
|
:return: A tuple containing (the currently running items, the items awaiting execution)
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_tasks_remaining(self) -> int:
|
|
"""
|
|
Gets the length of the queue and the currently processing tasks
|
|
:return: an integer count
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def wipe_queue(self) -> None:
|
|
"""
|
|
Deletes all items on the queue
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete_queue_item(self, function: typing.Callable[[QueueTuple], bool]) -> bool:
|
|
"""
|
|
Deletes the first queue item that satisfies the predicate
|
|
:param function: a predicate that takes queue tuples and returns true if it matches
|
|
:return: True if an item as removed
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_history(self, prompt_id: typing.Optional[str] = None, max_items=None, offset=-1) -> typing.Mapping[
|
|
str, HistoryEntry]:
|
|
"""
|
|
Creates a deep copy of the history
|
|
:param prompt_id:
|
|
:param max_items:
|
|
:param offset:
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def wipe_history(self):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def delete_history_item(self, id_to_delete: str):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def set_flag(self, name: str, data: bool) -> None:
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_flags(self, reset: bool = True) -> Flags:
|
|
"""
|
|
Resets the flags for the next model unload or free memory request.
|
|
:param reset:
|
|
:return:
|
|
"""
|
|
pass
|
|
|
|
def get_current_queue_volatile(self) -> AbstractPromptQueueGetCurrentQueueItems:
|
|
"""
|
|
A workaround to "improve performance with large number of queued prompts",
|
|
:return: A tuple containing (the currently running items, the items awaiting execution)
|
|
"""
|
|
return self.get_current_queue()
|
|
|
|
|
|
class AsyncAbstractPromptQueue(metaclass=ABCMeta):
|
|
@abstractmethod
|
|
async def put_async(self, queue_item) -> TaskInvocation | None:
|
|
"""
|
|
Puts the item on the queue, and waits until it is complete
|
|
:param queue_item:
|
|
:return:
|
|
:raises: ExecutionException when the worker returns an error, which can be cast to a task invocation
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def get_async(self, timeout: float | None = None) -> typing.Optional[typing.Tuple[QueueTuple, str]]:
|
|
pass
|