Python-telegram-bot을 쓰고 있다가 최근에 일부 실행환경에서 메시지가 전달되지 않는 현상이 있다는 걸 뒤늦게 알게 되었다. 전체 프로그램 자체는 별다른 문제가 없어서 몰랐는데 아래와 같이 coroutine이 awaited 되지 않았다는 경고 메시지가 발생하고 메시지가 텔레그램으로 전달되지 않는다.
메인 PC에 Python 3.11을 새롭게 설치하면서 기존에는 13.15 버전을 쓰다가 최신버전인 20.0을 자연스럽게 설치하게 되었는데 그 이후로 예전 코드가 먹통이 된 것 같다. 20.0 버전에서 뭐가 바뀌었나 해서 홈페이지(https://docs.python-telegram-bot.org/en/stable/)를 가보았더니 20.0 버전부터 Since v20.0, Python-Telegram-bot is build on top of Pythons asyncio module이라고 명시되어 있다.
아무튼 13.15에서는 아래와 같은 코드로 메시지를 보내는 것이 가능했지만 이제는 RuntimeWarning 에러가 발생한 후 아무런 메시지가 전달되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
|
import telegram
my_token = "MYTOKEN!@#$%^&*()"
chat_id = 123412345
bot = telegram.Bot(token=my_token)
def send_message(text):
bot.sendMessage(chat_id=chat_id, text=str(text + 'v1'))
send_message('python-telegram-bot sendmessage test')
|
cs |
결론적으로는 현재는 아래와 같이 실행하고자 하는 기존의 함수에 async / await 구문을 추가하고 asyncio.run()을 통해서 함수를 실행해야 메시지가 정상적으로 전달된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import telegram
import asyncio
my_token = "MYTOKEN!@#$%^&*()"
chat_id = 123412345
bot = telegram.Bot(token=my_token)
async def send_message(text):
await bot.sendMessage(chat_id=chat_id, text=text)
asyncio.run(send_message('python-telegram-bot sendmessage test'))
|
cs |
문제는 기존에 Network 지연시간을 회피하기 위해서 threading을 사용해서 해결해 왔는데 이 코드가 먹히지가 않는다. 다른 몇 가지 방법을 적용해보고 있는데 쉽지가 않아서 그냥 다른 telegram API를 사용해 볼까 고민 중이다.
2021.09.13 - [Python, API] - 텔레그램의 I/O Bound 해결
텔레그램의 I/O Bound 해결
텔레그램의 API를 활용하면 시스템트레이딩 중에 매수나 매도 시그널이 발생할 경우 지정된 사용자의 텔레그램 계정으로 메시지를 보낼 수 있다. 그런데 우연히 프로그램의 로그파일을 보다가
toniteifly.tistory.com
'Python, API' 카테고리의 다른 글
Pandas.read_sql 속도 비교 (chunksize, connectorx) (0) | 2023.02.26 |
---|---|
[Telegram API] pyTelegramBotAPI로 메시지 보내기 (0) | 2023.02.08 |
Python 3.11의 속도개선 (feat. 5950X vs 7950X) (0) | 2023.01.07 |
투자 관련 API를 사용할 때 조심해야 할 점 (0) | 2022.11.28 |
백테스트의 속도개선(2) (0) | 2022.11.27 |