使用Python Telethon定时发消息异常:首次告警后续无消息
问题解决:Telethon定时发消息失败及RuntimeWarning问题
错误原因
Telethon的核心方法(如start()、send_file()、disconnect())都是异步协程,直接调用这些方法却未用await触发执行,会导致协程从未运行,既抛出RuntimeWarning,消息也实际未发送。另外你的phone变量多了一个多余的括号,可能引发客户端初始化异常。
修改后的完整代码
from telethon import TelegramClient import schedule import asyncio async def sendImage(): apiId = 1111111 apiHash = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" phone = "+111111111111" # 移除了多余的括号 client = TelegramClient(phone, apiId, apiHash) toChat = 1641242898 await client.start() print("Sending...") await client.send_file(toChat, "./image.jpg", caption="Write text here") await client.disconnect() def main(): # 用asyncio.run包装异步函数,适配同步的schedule库 schedule.every(10).seconds.do(lambda: asyncio.run(sendImage())) while True: schedule.run_pending() if __name__ == "__main__": main()
关键修改说明
- 将
sendImage定义为异步函数(async def),所有Telethon异步方法前添加await,确保协程被执行; - 修正
phone变量的语法错误; - 由于
schedule是同步调度库,通过lambda+asyncio.run()的方式,让调度器能正确触发异步任务; client.disconnect()同样是异步方法,必须用await等待断开完成。
可选优化方案
如果长期使用异步任务,建议替换为支持异步的调度库(如APScheduler的AsyncIOScheduler),代码结构会更简洁,避免同步/异步混合的适配问题。
内容的提问来源于stack exchange,提问作者Simonalbi
相关产品推荐
相关产品推荐

