Proactor policy fix (#17066)
* Proactor policy fix * Backport Proactor policy for <py37pull/17059/head^2
parent
1667481342
commit
1decba0052
homeassistant
|
@ -22,16 +22,30 @@ from homeassistant.const import (
|
|||
def set_loop() -> None:
|
||||
"""Attempt to use uvloop."""
|
||||
import asyncio
|
||||
from asyncio.events import BaseDefaultEventLoopPolicy
|
||||
|
||||
policy = None
|
||||
|
||||
if sys.platform == 'win32':
|
||||
asyncio.set_event_loop(asyncio.ProactorEventLoop())
|
||||
if hasattr(asyncio, 'WindowsProactorEventLoopPolicy'):
|
||||
policy = asyncio.WindowsProactorEventLoopPolicy()
|
||||
else:
|
||||
class ProactorPolicy(BaseDefaultEventLoopPolicy):
|
||||
"""Event loop policy to create proactor loops."""
|
||||
|
||||
_loop_factory = asyncio.ProactorEventLoop
|
||||
|
||||
policy = ProactorPolicy()
|
||||
else:
|
||||
try:
|
||||
import uvloop
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
||||
policy = uvloop.EventLoopPolicy()
|
||||
|
||||
if policy is not None:
|
||||
asyncio.set_event_loop_policy(policy)
|
||||
|
||||
|
||||
def validate_python() -> None:
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
import concurrent.futures
|
||||
import threading
|
||||
import logging
|
||||
import sys
|
||||
from asyncio import coroutines
|
||||
from asyncio.events import AbstractEventLoop
|
||||
from asyncio.futures import Future
|
||||
|
@ -23,10 +22,7 @@ except AttributeError:
|
|||
|
||||
def asyncio_run(main: Awaitable[_T], *, debug: bool = False) -> _T:
|
||||
"""Minimal re-implementation of asyncio.run (since 3.7)."""
|
||||
if sys.platform == 'win32':
|
||||
loop = asyncio.ProactorEventLoop()
|
||||
else:
|
||||
loop = asyncio.new_event_loop()
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
loop.set_debug(debug)
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue