Django-timelimit allows you to wrap sections of Django templates with a timeout to enforce an upper bound on render time. When the templates exceeds this time, an alternative fragment is rendered instead:
{% load timelimit %}
{% timelimit 0.05 %}
{# perform a potentially very slow operation #}
<p>No timeout occurred</p>
{% sleep 0.5 %}
{% else %}
<p>Sorry, couldn't render the fragment in time.</p>
{% endtimelimit %}
Installation
$ pip install django-timelimit
Reentrant
Django-timelimit is fully reentrant, which means that you can have nested timeouts:
{% load timelimit %}
{% timelimit 0.10 %}
{# perform a potentially very slow operation #}
{% timelimit 0.05 %}
{# perform another potentially slow operation #}
{% else %}
<p>Sorry, couldn't render the nested fragment in time.</p>
{% endtimelimit %}
<p>No timeout occurred</p>
{% else %}
<p>Sorry, couldn't render the fragment in time.</p>
{% endtimelimit %}
Nested timeouts allow a large outer timeout to contain smaller timeouts. If the inner timeout is larger than the outer timeout, it is treated as a no-op.
Quotas
Interruptingcow quotas (introduced in interruptingcow 0.7) are supported too, allowing you to share a single allocation of time between different timelimit tags:
{% load timelimit %}
{% for foo in bar %}
{% timelimit quota_var %}
...
{% else %}
...
{% endtimelimit %}
{% endif %}
This is useful in loops where you do not want the total render time to go up with the number of iterations of the loop.
Caveats
Django-timelimit is based on interruptingcow and so it shares its limitations. Interruptingcow uses signal(SIGALRM) to let the operating system interrupt program execution, meaning:
Python signal handlers only apply to the main thread, so you cannot use this from other threads (this also means you cannot use this in a multithreaded webserver, or even ones that use a background thread for request handling (Gunicorn works great).
You must not use this in a program that uses SIGALRM itself (this includes certain profilers)
Metadata
Release files for django-timelimit 0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-timelimit-0.3.tar.gz | 3.7 kB | Details |
Release files / django-timelimit-0.3.tar.gz
| Download URL | django-timelimit-0.3.tar.gz |
|---|---|
| Size | 3.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ed268ba2e4db3bc6f4b47607f6de760c33a1e3fbf46e701e83d6dc2ba05f720
|
|
BLAKE2b-256 checksum How to use checksums |
5a812ea227f4d66bd05241c11e380bd875f229316e771789da42a154fd30e184
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Python-urllib/3.7
|