Hi Vaclav,
This is because there's only so much we can pack into runserver; when you develop with Celery, for example, you would probably need to run Celery unless you turn ALWAYS_EAGER on (and then not actually see any potential race conditions).
If you don't want to run Redis locally, you can use the asgi_ipc layer (
https://github.com/django/asgi_ipc) which only works between processes on the same machine, but doesn't require any extra processes to run. It should get around 5,000 - 10,000 messages/second throughput on a normal laptop, which should be plenty for your use case.
If you switch to the IPC layer (or the Redis layer), you can still use "runserver" and then just launch an extra delay server, and all the components will talk to each other.
Andrew