Асинхронные функции: ошибка "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 можно было использовать повторно