You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Telethon客户端在CTRL+C或程序关闭时强制断开连接

解决方案

问题根因

你当前的代码没有处理程序终止信号,按下CTRL+C时会直接中断进程,没有执行Telethon客户端的正常断连逻辑,导致Telegram服务端仍保留旧的会话连接标识,二次启动时会话冲突无法连接。

修改后代码

from telethon import TelegramClient, events
import globals, asyncio

client = TelegramClient('anon', globals.api_id, globals.api_hash)

@client.on(events.NewMessage(chats=globals.tLink))
async def my_event_handler(event):
    print(event.raw_text)

async def main():
    try:
        await client.start()
        await client.run_until_disconnected()
    except KeyboardInterrupt:
        pass
    finally:
        # 所有退出场景都会执行断连逻辑,清理服务端会话
        await client.disconnect()

if __name__ == "__main__":
    asyncio.run(main())

补充说明

  • 代码将原来的同步调用逻辑改为异步显式管理生命周期,finally块会在程序收到CTRL+C、抛出异常、正常退出等所有场景下执行,保证客户端和Telegram服务端的会话正常断开,不会残留旧连接
  • 原代码导入的sync模块可以移除,异步管理生命周期的方式更稳定,也更容易处理退出逻辑
  • 如果需要兼容3.7以下版本Python(无asyncio.run接口),可以把最后一行替换为:
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    

内容的提问来源于stack exchange,提问作者Eduard Schranzmeister Bäcker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:15:05