asyncio.run RuntimeError: цикл событий закрыт

import robloxapi, asyncio
client = robloxapi.Client(".ROBLOSECURITY Cookie Here") # Removed this for security reasons

async def main():
    user = await client.get_self()

    try:
        role = await user.get_role_in_group(1)
    except robloxapi.utils.errors.NotFound:
        role = None

    if role:    
        print(role.name)
    else:
        print("Not in group")

asyncio.run(main())

Этот код вызывает RuntimeError: Event loop is closed, и я понятия не имею, почему,

Я попытался заменить asyncio.run этим

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

но это дало мне ту же ошибку


person Filip    schedule 01.05.2020    source источник
comment
Возможен дубликат? stackoverflow.com/questions/45600579/ . я не отметил   -  person TXOG    schedule 01.05.2020
comment
Нет, похоже, это ничего не меняет. У меня все еще та же ошибка. В комментариях они упомянули, что такое поведение по умолчанию происходит при использовании asyncio.run.   -  person Filip    schedule 01.05.2020
comment
В итоге я запустил его в WSL, и сработал точно такой же код.   -  person Filip    schedule 02.05.2020
comment
@Filip, я пишу общий ответ о циклах событий proactor en selector, чтобы помочь некоторым людям здесь. Мне было интересно, помог ли вам мой ответ? Не могли бы вы дать отзыв?   -  person Gerrit Geeraerts    schedule 16.06.2020


Ответы (2)


В Windows сделайте так:

asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())
person j4hangir    schedule 23.03.2021

Я новичок в StackOverflow и не могу писать комментарии. Си, я напишу это здесь как ответ. Я столкнулся с аналогичной проблемой с asyncio.

Итак, проблема, с которой я столкнулся, была решена путем изменения используемого питона Eventloop.

В версиях Python ниже 3.8-: - SelectorEventLoop используется в Windows - ProactorEventLoop используется в Linux.

(в python 3.8+ они оба ProactorEventLoop). Так что это не поможет вам, если у вас установлен python 3.8+. Поскольку у вас будет тот же цикл событий в Windows, что и в WSL.

если у вас есть версия Python ниже 3.8 - это, вероятно, вам поможет.

Таким образом, вы можете попробовать вручную установить ProactorEventLoop, который также используется, когда вы используете WSL.

asyncio.set_event_loop(asyncio.ProactorEventLoop())

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

Я надеюсь, что эта информация поможет вам.

person Gerrit Geeraerts    schedule 08.05.2020