Optimized @async_unsafe.
Switched the order of the checks to reduce the overhead. Async unsafe methods are *normally* called syncrhonously, so we can avoid the overhead of checking the environment variable in the regular path.
This commit is contained in:
parent
7b8beeee3d
commit
37d9ea5d5c
|
@ -1,6 +1,6 @@
|
||||||
import asyncio
|
|
||||||
import functools
|
|
||||||
import os
|
import os
|
||||||
|
from asyncio import get_running_loop
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
from django.core.exceptions import SynchronousOnlyOperation
|
from django.core.exceptions import SynchronousOnlyOperation
|
||||||
|
|
||||||
|
@ -11,15 +11,15 @@ def async_unsafe(message):
|
||||||
the function while in an async context will get an error message.
|
the function while in an async context will get an error message.
|
||||||
"""
|
"""
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
@functools.wraps(func)
|
@wraps(func)
|
||||||
def inner(*args, **kwargs):
|
def inner(*args, **kwargs):
|
||||||
if not os.environ.get('DJANGO_ALLOW_ASYNC_UNSAFE'):
|
# Detect a running event loop in this thread.
|
||||||
# Detect a running event loop in this thread.
|
try:
|
||||||
try:
|
get_running_loop()
|
||||||
asyncio.get_running_loop()
|
except RuntimeError:
|
||||||
except RuntimeError:
|
pass
|
||||||
pass
|
else:
|
||||||
else:
|
if not os.environ.get('DJANGO_ALLOW_ASYNC_UNSAFE'):
|
||||||
raise SynchronousOnlyOperation(message)
|
raise SynchronousOnlyOperation(message)
|
||||||
# Pass onward.
|
# Pass onward.
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue