Асинхронные функции: ошибка "There is no current event loop in thread 'MainThread'"

Когда я еще раз вызываю функцию, внутри которой асинхронная функция, я получаю ошибку:There is no current event loop in thread 'MainThread'

from requests_html import AsyncHTMLSession,HTMLSession
import asyncio
from bs4 import BeautifulSoup

def dbuff_links_maker(heroes):
    dbuff_urls = []
    for hero in heroes:
        dbuff_urls.append("https://ru.dotabuff.com/heroes/" + hero + "/counters")
    return (dbuff_urls)

async def work(s,url):
    re = await s.get(url)
    await re.html.arender()
    soup = BeautifulSoup(re.text, 'lxml')
    return soup


async def soups_tasks(urls):
    s = AsyncHTMLSession()
    tasks = (work(s, url) for url in urls)
    return await asyncio.gather(*tasks)



def team_each_hero_advantage(ally_team_soup,enemy_hero_list):
    each_hero_advantage=[]
    for hero_soup in ally_team_soup:
        sum = 0
        for enemy_name in enemy_hero_list:
                enemy = '/heroes/' + enemy_name
                tds = hero_soup.find('table', class_='sortable').find('tr', attrs={'data-link-to': enemy}).find_all("td")
                value = float(tds[2].text[:-1])
                sum += value
        each_hero_advantage.append(-float('{:.3f}'.format(sum)))
    return (each_hero_advantage)

def team_advantage_gainer(all_heroes):
    dbuff_urls=dbuff_links_maker(all_heroes)

    results=asyncio.run(soups_tasks(dbuff_urls))
    radiant_soup=results[:5]
    dire_soup=results[5:]

    dire_hero_list=all_heroes[5:]
    radiant_hero_list=all_heroes[:5]

    radiant_hero_advantages=team_each_hero_advantage(radiant_soup,dire_hero_list)
    dire_hero_advantages=team_each_hero_advantage(dire_soup,radiant_hero_list)

    return (radiant_hero_advantages,dire_hero_advantages)



def main():
    heroes=['medusa','tiny','disruptor','skywrath-mage','axe','legion-commander','vengeful-spirit','jakiro','terrorblade','pangolier']

    hero_advantages=team_advantage_gainer(heroes)
    radiant_hero_advantages=hero_advantages[0]
    dire_hero_advantages=hero_advantages[1]

    radiant_advantage=sum(radiant_hero_advantages)

    radiant_heroes = heroes[:5]
    dire_heroes = heroes[5:]

    radiant = {}
    dire = {}

    for radiant_hero,radiant_hero_adv in zip(radiant_heroes,radiant_hero_advantages):
        radiant[radiant_hero]=radiant_hero_adv

    for dire_hero,dire_hero_adv in zip(dire_heroes,dire_hero_advantages):
        dire[dire_hero]=dire_hero_adv

    print('\nRadiant Advantage:')
    print(' ',float('{:.3f}'.format(radiant_advantage)),'\n')

    print('Radiant:\n',radiant,'\n')
    print('Dire:\n',dire,'\n')

main()
while True:
    flag=input("Continue? [y/n]")
    if flag==y:
        main(flag)
    else:
        break

При первом вызове все работает хорошо, но при повторном программа вылетает с ошибкой:

Traceback (most recent call last):
  File "C:\Users\denpo\Desktop\test.py", line 84, in <module>
    if flag==y:
             ^
NameError: name 'y' is not defined
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905A34C0>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
sys:1: RuntimeWarning: coroutine 'Launcher.killChrome' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905BFA60>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905E1260>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905E0C20>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905E05E0>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905A3100>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905A3C40>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905A3880>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905E1760>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in atexit callback: <function Launcher.launch.<locals>._close_process at 0x00000237905A2F20>
Traceback (most recent call last):
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyppeteer\launcher.py", line 153, in _close_process
    self._loop.run_until_complete(self.killChrome())
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 625, in run_until_complete
    self._check_closed()
  File "C:\Users\denpo\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 519, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Process finished with exit code 1

Как избежать данную ошибку при повторном вызове функции? Я нашел, что я получаю ошибку, потому что event loop закрывается после первого запуска функции. Мне следует использовать что-то вместо asyncio.run или как мне сделать чтобы eventloop можно было использовать повторно


Ответы (0 шт):