2016-01-26 3 views
6

Я работаю в основном в интерактивной оболочке IPython. Иногда я копирую-вставляю код из Интернета, чтобы проверить его и работать с примерами.Как заменить замкнутый цикл событий?

Если я вставьте следующий код из this tutorial:

import asyncio 

async def speak_async(): 
    print('OMG asynchronicity!') 

loop = asyncio.get_event_loop() 
loop.run_until_complete(speak_async()) 
loop.close() 

Я закрыть петлю. В documentation говорится, что не следует использовать какие-либо методы в цикле событий после его закрытия. И async.get_event_loop() все равно вернет этот замкнутый цикл.

Что делать, если случайно закрыл цикл событий? Я бы предпочел не перезапускать интерпретатор.

ответ

10

Вы могли бы просто create and set a new event loop for the current context;

asyncio.set_event_loop(asyncio.new_event_loop()) 
+0

это хорошая идея;) – brunsgaard

+0

Должен ли я установить его, или я могу использовать его напрямую? Я полагаю, что есть какая-то магия, которая заставляет меня хотеть ее установить. – leewz

+0

@leewangzhong После того, как вы установите его, следующий вызов 'asyncio.get_event_loop()' будет возвращать новый цикл, и ваш код снова будет работать без выхода из интерпретатора. –

Смежные вопросы