asyncio.run() cannot be called from a running event loop 에러 질문 드립니다
3877
2 asked
안녕하세요 선생님
강의 듣고 있는 이광희라고 합니다.
올려주신 강의로 텔레그램 자체 API를 써서 메세지 전송하기까진 했는데요
이미지를 전송하려고 보니 거의 모든 블로그, 유튜브 설명들이 파이썬 텔레그램봇으로 설명 하더라구요
근데 이 봇이 v20으로 바뀌면서 비동기 프로그래밍(?)이 된거 같습니다.
설명하고 있는 코드들이 다 과거 버전 코드들이네요. 그래서 위키에 직접 가서 코드를 보고 있는데요
import asyncio
import telegram
async def main():
bot = telegram.Bot("TOKEN")
async with bot:
print(await bot.get_me())
if __name__ == '__main__':
asyncio.run(main())그냥 위키에 나오는 간단한 코드인데도
RuntimeError: asyncio.run() cannot be called from a running event loop이런 에러가 계속 뜹니다.
async 부터 공부하려고 다른 유튜브를 찾아서
import asyncio
async def main():
await asyncio.sleep(1)
print('hello')
asyncio.run(main())이런 간단한 코드를 입력해도
똑같은 오류가 뜨네요...
이벤트 메인 루프가 실행되고 있는 동안에 함수가 작동할수 없다 그런 내용인거 같은데
위키에 있는 그대로 따라해도 에러가 나니 비전공자 입장에서는 어떻게 해야 좋을지 모르겠네요.
경영학과 출신 직장인이 실무에서 쓰려고 파이썬을 배우고 있는데
물어볼곳이 여기밖에 없어 여쭤봅니다ㅠㅠ 좀 도와주세요
깃헙? 말고 국내 파이썬 qna있는 커뮤니티라도 알려주시면 가서 좀 물어보고 싶은데 그게 어디인지도 모르겠네요.
Answer 4
0
저는 jupyter notebook에서 코드를 실행했을 때 안되고, 파이썬 파일로 코드를 실행하니 정상적으로 작동했습니다. 윗 분들 말씀대로 "예기치 않은 동작으로 이어질 수 있는 중첩된 이벤트 루프를 실수로 생성하는 것을 방지하기 위해" asyncio가 적용해 놓은 실행환경 제한 에러네요.
0
올리신 asyncio 기본 코드는 문제가 없으니 실행 환경을 바꿔보세요.
아래는 기본 api만으로 이미지를 보내는 방법입니다.
# 텔레그램 봇 API URL
url = f'https://api.telegram.org/bot{TOKEN}/sendPhoto'
# 이미지 파일 열기
with open(PHOTO_PATH, 'rb') as photo:
files = {'photo': photo}
data = {'chat_id': CHAT_ID}
# 이미지를 전송하는 POST 요청 보내기
response = requests.post(url, files=files, data=data)
# 응답 출력
print(response.json())제가 강의에 python-telegram-bot 라이브러리를 사용하지 않은 이유가 바로 asyncio 때문입니다.
python-telegram-bot 라이브러리를 제대로 사용하려면 asyncio까지 어느 정도는 배워야 하니까요.
이미 asyncio를 아는 사람이 텔레그램을 사용하기 위해 python-telegram-bot 라이브러리를 공부하는 것과 python-telegram-bot 라이브러리를 사용하기 위해 asyncio를 공부해야 하는건 큰 차이가 있습니다.
이미 asyncio까지 알고 있다는건 프로그래밍을 기초 이상은 공부한 사람일테니까요.
대부분의 파이썬 기초책에는 asyncio에 대한건 아예 나오지도 않습니다.
그리고,
저도 비전공자입니다. 게다가 커뮤니티 활동도 전혀 안 하고 누구에게도 프로그래밍 관련 질문을 아예 안 하기 때문에 어느 커뮤니티에 질문을 올리면 좋을지는 모르겠습니다.
물론, 관련 커뮤니티는 검색하면 많이 나오니까 한번 찾아 들어가 보셔도 좋을 것 같습니다.
0
찾다가 여기까지 갔네요... 아나콘다 쓰는게 문제인거 같은데 그래도 또 새로운 에러가..
자문자답 합니다. 찾으시는 분들 있을까봐 남겨놓습니다.
0
프로그램은 아나콘다 스파이더 쓰고 있구요
챗gpt에 물어보니
당신 말이 맞아요. asyncio.run()기존 이벤트 루프 내에서는 호출할 수 없습니다. 이 제한은 예기치 않은 동작으로 이어질 수 있는 중첩된 이벤트 루프를 실수로 생성하는 것을 방지하기 위해 적용됩니다.
이미 이벤트 루프가 실행 중인 환경(예: Jupyter 노트북 또는 대화형 Python 셸)에서 이 코드를 실행하는 경우 이벤트 루프를 수동으로 만들고 실행해야 합니다.
이러한 환경에서 작동하도록 코드를 수정하는 방법은 다음과 같습니다.
import asyncio
async def main():
await asyncio.sleep(1)
print('hello')
# If there's an event loop running, get it
loop = asyncio.get_event_loop()
# Schedule the coroutine to run in the existing event loop
loop.run_until_complete(main())그래도 에러가 뜹니다
RuntimeError: This event loop is already running
멜론 사이트 수집부터 안됩니다
0
55
1
강의 시점이랑 현재랑 네이버 사이트 변화가 많은거 같아서 질문드립니다.
0
53
1
-href 가져오기
0
87
2
수업내용 프로젝트의 완성된 코드는 제공이 안돼나요?
0
154
1
안녕하세요 쿠팡 크롤링 막힌거 같아요 3번돌리니깐 막았어요 해결방법없을까요?
0
3567
1
쿠팡 BeautifullSoup 헤더넣어도 막히네요
0
441
1
네이버 쇼핑 크롤링 1 코드 사용 시, 접속 제한됐을 때의 해결 방법이 궁금합니다.
0
3154
1
추가 강의 업데이트 있나요?
0
244
1
lambda 중에 문의가 있습니다.
0
269
1
텔레그램 sendMessage 시 400에러가 뜹니다.
0
894
2
ftp 로긴 문제입니다. ㅜ
0
399
2
네이버 쇼핑 크롤링 질문입니다.
0
366
1
XPATH 네이버에서 카페 찾는 과정 문의입니다.
1
311
1
셀레니움 By.XPATH 를 이용한 키워드 입력 작성 질문입니다.
0
660
2
쿠팡 이미지 파일 다운받기에서 동일하게 코드 작성 후 요청하였지만 파일 다운로드가 안됩니다.
0
802
2
파이썬에 키워드를 치는게 아닌...
0
274
2
50프로 수강중입니다~
0
217
1
제품 링크를 타고 들어가야 원하는 정보가 나오는 사이트
0
377
2
lst = lst50 + lst100 이거 대신에
0
318
2
증권, 메일 등 서비스 목록을 못가져와요 ㅠㅠ
1
279
1
네이버에 view탭이 업데이트가 됐는지 없어졌네요... ㅠㅠ
1
241
1
선생님이랑 똑같이 적었는데 저는 왜 오류가 날까요?ㅠ
0
351
2
네이버쇼핑 크롤링 문의
0
424
2
멜론 유저에이전트 값 입력했음에도 창접속이안되여 ㅜㅜ
0
245
1

