Demos

This modules contains 3 mini-applications that showcase using procrastinate in difference contexts:

  • demo_django: a Django application,

  • demo_async: an async application, it could be a FastAPI application, but to make things simpler, it’s just a plain asyncio application.

  • demo_sync: a synchronous application, similarily, it could be representative of a Flask application.

The demos are there both to showcase the code and as a way to easily recreate the issues that are reported in the issues. They are not production-ready code, and if you want to run them, you’ll need to set up the Procrastinate development environment (see contributing doc)

To run the demos, set PROCRASTINATE_APP to procrastinate_demos.<demo_name>.app.app, then run the procrastinate CLI or python -m procrastinate_demos.<demo_name> for the application main entrypoint.

For all apps, you’ll need to have a PostgreSQL database running, and set the PG[...] environment variables. This is taken care of by the . ./dev-env script if you want to use it.

You’ll need 2 terminals to run the demos, one for the procrastinate worker and one for the application. (If you prefer, you can use baclground processes).

Async demo

Launch the worker in the first terminal:

$ PROCRASTINATE_APP=procrastinate_demos.demo_async.app.app procrastinate worker

In the second terminal, run the application:

$ python -m procrastinate_demos.demo_async

Defer a job by sending commands, as indicated by the application.

Sync demo

Same with sync:

$ PROCRASTINATE_APP=procrastinate_demos.demo_sync.app.app procrastinate worker
$ python -m procrastinate_demos.demo_sync

Django demo

In the first terminal, run the migrations, and then the Django server:

$ procrastinate_demos/demo_django/manage.py migrate
$ procrastinate_demos/demo_django/manage.py runserver

In the second terminal, run the procrastinate worker:

$ procrastinate_demos/demo_django/manage.py procrastinate worker

In your browser (http://localhost:8000/), you can now: - Create a book - List books

When a book is created, it’s not “indexed” right away (there’s no real indexing under the hood, it’s just for show). A first job is deferred to index the book, which waits for 5 seconds and defers a second job. The second job updates the book’s status to “indexed”. Reloading the list page should show the book as indexed after about 5 seconds. (The only reason why it’s done in 2 jobs rather than one is to showcase deferring a job from another job.)

You can visit the admin, too. You’ll need to create a superuser first:

$ procrastinate_demos/demo_django/manage.py createsuperuser

Then lauch the server, head to http://localhost:8000/admin/ and see the jobs, the events and the periodic defers.

(…Yes I’m not a frontend dev :) )