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 :) )