From 53fad80ffe16ab4edb713b1ef0090d0fcf63565a Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Tue, 5 Oct 2021 12:39:13 +0200 Subject: [PATCH] [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. --- django/utils/asyncio.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/django/utils/asyncio.py b/django/utils/asyncio.py index 2405e3413e..cd4dcd9f46 100644 --- a/django/utils/asyncio.py +++ b/django/utils/asyncio.py @@ -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)