Defer a job#

There are several ways to do this.

In the following examples, the task will be:

@app.task(queue="some_queue")
def my_task(a: int, b:int):
    pass

Task name is my_module.my_task.

The direct way#

my_task.defer(a=1, b=2)

With parameters#

my_task.configure(
    lock="the name of my lock",
    schedule_in={"hours": 1},
    queue="not_the_default_queue"
).defer(a=1, b=2)

See details in Task.configure()

Create a job pattern, launch multiple jobs#

pattern = my_task.configure(task_kwargs={"a": 1})

pattern.defer(b=2)
pattern.defer(b=3)
pattern.defer(b=4)

Defer a job if you can’t access the task#

This is useful if the code that defers jobs is not in the same code base as the code that runs the jobs. You can defer a job with just the name of its task.

app.configure_task(name="my_module.my_task", queue="some_queue").defer(a=1, b=2)

Any parameter you would use for Task.configure() can be used in App.configure_task().

From the command line#

$ procrastinate defer my_module.my_task '{"a": 1, "b": 2}'

If the task is not registered, but you want to defer it anyway:

$ procrastinate defer --unknown my_module.my_task '{"a": 1, "b": 2}'
$ # or
$ export PROCRASTINATE_DEFER_UNKNOWN=1
$ procrastinate defer my_module.my_task '{"a": 1, "b": 2}'