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

Telethon更新处理器消息延迟优化:如何实现毫秒级接收?

Telethon消息处理延迟优化问题

我使用Python Telethon开发了一个更新处理器,用于从指定群组列表读取消息,并提取加密货币代码(ticker)发送至加密货币交易所API。程序要求消息在发送至频道后毫秒级被处理器接收,但目前每条消息从送达处理器到完成处理耗时至少20至60秒,无法满足需求。

相关代码

client = TelegramClient('123445.session', '#####', '#####', flood_sleep_threshold=0)

@client.on(events.NewMessage(chats=[x[0] for x in idList.items()]))
async def my_event_handler(event):

    nowDate = datetime.now()
    verified, groupVerified, logBookList, queueList, ticker, dateOfMessage, signalled, endOfSignalled, stopReload, priceVerify, includesImage, nonTrade, notVerified, pumpVerified, tickerNotFound, username, newMessage, includesImageTag, startOfTickerFinder, endOfTickerFinder = 0, 1, [], [], 0, event.message.date, "Message Time: "+str(event.message.date), "Signalled: "+str(datetime.now()), 1, 0, False, 0, 0, 0, 0, event.chat.username, (event.message.message.encode("utf-8")).decode("utf-8"), "", "Ticker Finder not used", "Ticker Finder not used"
    global previousMessage, accountsList, offSwitch, previousTickers, switchSelector, groupDict, idList
    if event.photo != None: includesImage, includesImageTag = True, "{INCLUDES IMAGE}"

    userDict = {'username':str(username),
                'switchSelectorNumber':str(groupDict[username][0]),
                'sellLimit':float(groupDict[username][1]),
                'stopLoss':float(groupDict[username][2]),
                'group':str(username),
                'logBookNumber':str(groupDict[username][4]),
                'timeLimit':float(groupDict[username][5]),
                'amountPercentage':float(groupDict[username][6]),
                'timeout': float(groupDict[username][10])
                }

    if nowDate.timestamp() - dateOfMessage.timestamp() > 120:
        #try:
        startOfTickerFinder = "Start of ticker finder: "+str(datetime.now())
        nonTradeTicker = tickerfinder.findticker(newMessage, userDict['username'], previousMessage[userDict['username']], includesImage)
        endOfTickerFinder = "End of ticker finder: "+str(datetime.now())
        #except:
            #nonTradeTicker = (0,0)
        timeFrameList = getTradeInfo(str(userDict['username']))

        stopList = getStopInfo(str(userDict['username']))

已尝试的优化方案

  • 为处理器添加正则表达式过滤器
  • 每次处理器迭代后调用get_input_entity以维持Telethon对频道的关注
  • 每次迭代后获取各频道最新消息

上述方案均未改善延迟问题,恳请提供可行的代码优化方案,让更新处理器能以毫秒级速度推送消息。

内容的提问来源于stack exchange,提问作者james townsend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:55:17