2015-12-26 3 views
3

Следующий код просто вешает никогда не печати ничего:цикл событий, созданный asyncio.new_event_loop висит

import asyncio 

async def foo(loop): 
    print('foo') 
    loop.stop() 

loop = asyncio.new_event_loop() 
asyncio.ensure_future(foo(loop)) 
loop.run_forever() 

Если я использую get_event_loop все работает отлично. Есть ли что-то, что я делаю неправильно, или я наткнулся на ошибку?

Я использую Python 3.5.1.

+0

'ensure_future()' принимает необязательный 'loop' параметр, вы должны передать его не конфликтовать с по умолчанию. На самом деле я настоятельно рекомендую использовать явные циклы только в асинхронных приложениях. –

+0

О, мой ... Я только что начал щедрость вместо неправильного вопроса: - /, если вы можете мне помочь: stackoverflow.com/questions/35861175/... Я с радостью награду вас щедростью. –

ответ

6

asyncio.AbstractEventLoopPolicy.new_event_loop documentation говорит:

Если там нужно установить этот цикл как цикл событий для текущего контекста, set_event_loop() должен вызываться явно.


import asyncio 

async def foo(loop): 
    print('foo') 
    loop.stop() 

loop = asyncio.new_event_loop() 
asyncio.set_event_loop(loop) # <---- 
asyncio.ensure_future(foo(loop)) 
loop.run_forever() 
+0

Ах, я видел это в какой-то момент, но я забыл попробовать. Наверное, я думал, что мне это не нужно, так как я не совсем понял, что это значит! Благодарю. – Elektito

+0

О, мой ... Я только начал щедрость вместо неправильного вопроса: - /, если вы можете мне помочь здесь: http://stackoverflow.com/questions/35861175/what-can-cause-asyncio-to -hang-on-just-create-a-new-loop, я с радостью награду вас щедростью. –