Документация asyncio.run () гласит:
Эту функцию нельзя вызвать, если в том же потоке выполняется другой цикл событий asyncio.
Проблема в вашем случае заключается в том, что jupyter (IPython) уже выполняет цикл обработки событий (для IPython ≥ 7.0 ):
Теперь вы можете использовать async / await вверхний уровень в терминале IPython и в ноутбуке должен - в большинстве случаев - «просто работать».Обновите IPython до версии 7+, IPykernel до версии 5+, и вы готовы к гонкам.
Вот почему вам не нужно запускать цикл событий самостоятельно в jupyter, и вы можете напрямую позвонить await main(url)
.
В jupyter
async def main():
print(1)
await main()
В простом Python (≥3.7)
import asyncio
async def main():
print(1)
asyncio.run(main())
В вашем коде это даст:
if __name__ == "__main__":
url = ['url1', 'url2']
result = await main(url)
for text in result:
pass # text contains your html (text) response