Skip to content

Task

Bases: Generic[Param, RValue]

Represent a task that is not yet queued to be executed. It is not constructed by the user, but it is returned when calling a task function.

Source code in src/alchemical_queues/tasks/main.py
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
class Task(Generic[Param, RValue]):
    """Represent a task that is not yet queued to be executed. It is not
    constructed by the user, but it is returned when calling a task function."""

    def __init__(
        self,
        handler: Callable[Concatenate[TaskInfo, Param], RValue],
        *args: Param.args,
        **kwargs: Param.kwargs,
    ):
        self._handler = handler
        self._args = args
        self._kwargs = kwargs

    def schedule(
        self,
        on_queue: AlchemicalTaskQueue,
        *,
        schedule_at: Union[datetime, None] = None,
        priority: int = 0,
        max_retries: int = 0,
        retry_in: Union[timedelta, None] = None,
    ) -> QueuedTask[RValue]:
        """Schedule a task on a queue to be executed.

        Args:
            on_queue (AlchemicalTaskQueue): the queue used as task queue.
                                        You are expected to run a worker connected to this queue.
            schedule_at (datetime, optional): do not run the task before this time.
            priority (int, optional): the task priority, using normal priority queue semantics.
            max_retries (int, optional): how many times the task should be retried before reporting failure.
            retry_in (timedelta, optional): the minimal timespan between two tries.
        """

        name = f"{self._handler.__module__}.{self._handler.__qualname__}"
        entry = on_queue.put(
            {
                "function": name,
                "args": self._args,
                "kwargs": self._kwargs,
                "retries": 0,
                "retry_in": retry_in,
                "max_retries": max_retries,
            },
            schedule_at=schedule_at,
            priority=priority,
        )
        return QueuedTask(queue=on_queue, entry_id=entry.entry_id, name=name)

schedule(on_queue, *, schedule_at=None, priority=0, max_retries=0, retry_in=None)

Schedule a task on a queue to be executed.

Parameters:

Name Type Description Default
on_queue AlchemicalTaskQueue

the queue used as task queue. You are expected to run a worker connected to this queue.

required
schedule_at datetime

do not run the task before this time.

None
priority int

the task priority, using normal priority queue semantics.

0
max_retries int

how many times the task should be retried before reporting failure.

0
retry_in timedelta

the minimal timespan between two tries.

None
Source code in src/alchemical_queues/tasks/main.py
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
def schedule(
    self,
    on_queue: AlchemicalTaskQueue,
    *,
    schedule_at: Union[datetime, None] = None,
    priority: int = 0,
    max_retries: int = 0,
    retry_in: Union[timedelta, None] = None,
) -> QueuedTask[RValue]:
    """Schedule a task on a queue to be executed.

    Args:
        on_queue (AlchemicalTaskQueue): the queue used as task queue.
                                    You are expected to run a worker connected to this queue.
        schedule_at (datetime, optional): do not run the task before this time.
        priority (int, optional): the task priority, using normal priority queue semantics.
        max_retries (int, optional): how many times the task should be retried before reporting failure.
        retry_in (timedelta, optional): the minimal timespan between two tries.
    """

    name = f"{self._handler.__module__}.{self._handler.__qualname__}"
    entry = on_queue.put(
        {
            "function": name,
            "args": self._args,
            "kwargs": self._kwargs,
            "retries": 0,
            "retry_in": retry_in,
            "max_retries": max_retries,
        },
        schedule_at=schedule_at,
        priority=priority,
    )
    return QueuedTask(queue=on_queue, entry_id=entry.entry_id, name=name)