Proactor policy fix (#17066)

* Proactor policy fix

* Backport Proactor policy for <py37
This commit is contained in:
Paulus Schoutsen 2018-10-02 09:55:37 +02:00 committed by GitHub
parent 1667481342
commit 1decba0052
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 7 deletions

View File

@ -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:

View File

@ -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: