[3.2.x] Refs #32074 -- Used asyncio.get_running_loop() instead of get_event_loop() on Python 3.7+.

Using asyncio.get_event_loop() when there is no running event loop was
deprecated in Python 3.10, see https://bugs.python.org/issue39529.
This commit is contained in:
Mariusz Felisiak 2021-10-05 12:39:13 +02:00 committed by GitHub
parent f6726fdc3e
commit 53fad80ffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 2 deletions

View File

@ -3,6 +3,13 @@ import functools
import os
from django.core.exceptions import SynchronousOnlyOperation
from django.utils.version import PY37
if PY37:
get_running_loop = asyncio.get_running_loop
else:
get_running_loop = asyncio.get_event_loop
def async_unsafe(message):
@ -16,11 +23,11 @@ def async_unsafe(message):
if not os.environ.get('DJANGO_ALLOW_ASYNC_UNSAFE'):
# Detect a running event loop in this thread.
try:
event_loop = asyncio.get_event_loop()
event_loop = get_running_loop()
except RuntimeError:
pass
else:
if event_loop.is_running():
if PY37 or event_loop.is_running():
raise SynchronousOnlyOperation(message)
# Pass onwards.
return func(*args, **kwargs)