use asyncio.ensure_future to start coroutines immediately

asyncio has different coroutine start mechanics than tornado

tornado starts coroutines immediately,
whereas asyncio doesn't until they are scheduled with either ensure_future or waited upon.
This commit is contained in:
Min RK
2018-03-01 17:41:51 +01:00
parent b6f634368c
commit 97293ab7ce
2 changed files with 5 additions and 4 deletions

View File

@@ -4,6 +4,7 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
import asyncio
import atexit
import binascii
from datetime import datetime
@@ -1286,7 +1287,7 @@ class JupyterHub(Application):
# spawner should be running
# instantiate Spawner wrapper and check if it's still alive
spawner = user.spawners[name]
f = check_spawner(user, name, spawner)
f = asyncio.ensure_future(check_spawner(user, name, spawner))
check_futures.append(f)
# await checks after submitting them all
@@ -1477,7 +1478,7 @@ class JupyterHub(Application):
if managed_services:
self.log.info("Cleaning up %i services...", len(managed_services))
for service in managed_services:
futures.append(service.stop())
futures.append(asyncio.ensure_future(service.stop()))
if self.cleanup_servers:
self.log.info("Cleaning up single-user servers...")
@@ -1485,7 +1486,7 @@ class JupyterHub(Application):
for uid, user in self.users.items():
for name, spawner in list(user.spawners.items()):
if spawner.active:
futures.append(user.stop(name))
futures.append(asyncio.ensure_future(user.stop(name)))
else:
self.log.info("Leaving single-user servers running")

View File

@@ -385,7 +385,7 @@ class User:
try:
# run optional preparation work to bootstrap the notebook
await awaitable(spawner.run_pre_spawn_hook())
f = spawner.start()
f = awaitable(spawner.start())
# commit any changes in spawner.start (always commit db changes before yield)
db.commit()
ip_port = await gen.with_timeout(timedelta(seconds=spawner.start_timeout), f)