From 079f072a8e90422dc74270992589c56ad9f7f9f2 Mon Sep 17 00:00:00 2001 From: Min RK Date: Thu, 13 May 2021 12:32:29 +0200 Subject: [PATCH] prefer SelectorEventLoop on Windows Selector is preferable when ~all out events are on zmq sockets, which uses the unsupported add_reader methods. Tornado 6.1 puts these events in a background thread when Proactor is used, which we can avoid by using Selector. --- ipykernel/kernelapp.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ipykernel/kernelapp.py b/ipykernel/kernelapp.py index f43baf2c0..480d98af3 100644 --- a/ipykernel/kernelapp.py +++ b/ipykernel/kernelapp.py @@ -565,14 +565,21 @@ def _init_asyncio_patch(self): Pick the older SelectorEventLoopPolicy on Windows if the known-incompatible default policy is in use. + Support for Proactor via a background thread is available in tornado 6.1, + but it is still preferable to run the Selector in the main thread + instead of the background. + do this as early as possible to make it a low priority and overrideable ref: https://github.com/tornadoweb/tornado/issues/2608 - FIXME: if/when tornado supports the defaults in asyncio, - remove and bump tornado requirement for py38 + FIXME: if/when tornado supports the defaults in asyncio without threads, + remove and bump tornado requirement for py38. + Most likely, this will mean a new Python version + where asyncio.ProactorEventLoop supports add_reader and friends. + """ - if sys.platform.startswith("win") and sys.version_info >= (3, 8) and tornado.version_info < (6, 1): + if sys.platform.startswith("win") and sys.version_info >= (3, 8): import asyncio try: from asyncio import (