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

如何同时运行Python协程与while循环?Telethon场景解决方案

解决Telethon客户端与异步定时任务同时运行的问题

问题场景

需要同时运行两个异步协程:一个是Telethon Telegram客户端,另一个是每分钟执行一次的数据获取异步任务。最初尝试用asyncio.run()分别启动两个协程,导致无法并行执行;试过asyncio.gather()和线程方式后,最终发现利用Telethon自带的事件循环就能完美解决。

实现方案

Telethon客户端本身会维护自己的事件循环,我们只需要在客户端启动后,将定时任务注册到这个循环中,就能让两个任务同时运行。

示例代码

from telethon import TelegramClient
import asyncio

# 替换为你的Telethon配置信息
API_ID = 12345
API_HASH = "your_api_hash_here"
SESSION_NAME = "telethon_session"

async def minute_data_fetch():
    """每分钟执行一次的数据获取任务"""
    while True:
        # 这里编写你的数据获取逻辑
        print("正在执行数据获取任务...")
        await asyncio.sleep(60)  # 间隔60秒执行一次

async def main():
    # 初始化并启动Telethon客户端
    client = TelegramClient(SESSION_NAME, API_ID, API_HASH)
    await client.start()

    # 获取当前Telethon使用的事件循环,添加定时任务
    current_loop = asyncio.get_running_loop()
    current_loop.create_task(minute_data_fetch())

    # 保持客户端持续运行,直到主动断开
    await client.run_until_disconnected()

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

关键说明

  • client.run_until_disconnected()会阻塞当前协程,保持Telethon客户端在线运行,同时事件循环会处理我们添加的定时任务。
  • 无需额外创建线程或单独启动新的事件循环,直接复用Telethon的循环即可避免循环冲突问题。

内容的提问来源于stack exchange,提问作者Zero Ainz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:01