mirror of
https://github.com/django/daphne.git
synced 2025-07-30 00:49:44 +03:00
Clarify receive blocking behaviour
This commit is contained in:
parent
863e298923
commit
7cd4fb2b42
|
@ -331,7 +331,8 @@ A *channel layer* must provide an object with these attributes
|
||||||
* ``receive(channels, block=False)``, a callable that takes a list of channel
|
* ``receive(channels, block=False)``, a callable that takes a list of channel
|
||||||
names as unicode strings, and returns with either ``(None, None)``
|
names as unicode strings, and returns with either ``(None, None)``
|
||||||
or ``(channel, message)`` if a message is available. If ``block`` is True, then
|
or ``(channel, message)`` if a message is available. If ``block`` is True, then
|
||||||
it will not return until after a built-in timeout or a message arrives; if
|
it will not return a message arrives (or optionally, a built-in timeout,
|
||||||
|
but it is valid to block forever if there are no messages); if
|
||||||
``block`` is false, it will always return immediately. It is perfectly
|
``block`` is false, it will always return immediately. It is perfectly
|
||||||
valid to ignore ``block`` and always return immediately, or after a delay;
|
valid to ignore ``block`` and always return immediately, or after a delay;
|
||||||
``block`` means that the call can take as long as it likes before returning
|
``block`` means that the call can take as long as it likes before returning
|
||||||
|
@ -409,21 +410,15 @@ A channel layer implementing the ``twisted`` extension must also provide:
|
||||||
* ``receive_twisted(channels)``, a function that behaves
|
* ``receive_twisted(channels)``, a function that behaves
|
||||||
like ``receive`` but that returns a Twisted Deferred that eventually
|
like ``receive`` but that returns a Twisted Deferred that eventually
|
||||||
returns either ``(channel, message)`` or ``(None, None)``. It is not possible
|
returns either ``(channel, message)`` or ``(None, None)``. It is not possible
|
||||||
to run it in nonblocking mode; use the normal ``receive`` for that. The
|
to run it in nonblocking mode; use the normal ``receive`` for that.
|
||||||
channel layer must be able to deal with this function being called from
|
|
||||||
many different places in a codebase simultaneously - likely once from each
|
|
||||||
Twisted Protocol instance - and so it is recommended that implementations
|
|
||||||
use internal connection pooling and call merging or similar.
|
|
||||||
|
|
||||||
A channel layer implementing the ``asyncio`` extension must also provide:
|
A channel layer implementing the ``async`` extension must also provide:
|
||||||
|
|
||||||
* ``receive_asyncio(channels)``, a function that behaves
|
* ``receive_async(channels)``, a function that behaves
|
||||||
like ``receive`` but that fulfills the asyncio coroutine contract to
|
like ``receive`` but that fulfills the asyncio coroutine contract to
|
||||||
block until either a result is available or an internal timeout is reached
|
block until either a result is available or an internal timeout is reached
|
||||||
and ``(None, None)`` is returned. The channel layer must be able to deal
|
and ``(None, None)`` is returned. It is not possible
|
||||||
with this function being called from many different places in a codebase
|
to run it in nonblocking mode; use the normal ``receive`` for that.
|
||||||
simultaneously, and so it is recommended that implementations
|
|
||||||
use internal connection pooling and call merging or similar.
|
|
||||||
|
|
||||||
Channel Semantics
|
Channel Semantics
|
||||||
-----------------
|
-----------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user