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

求助:实现带每分钟7条限流的消息分批发送功能

解决方案代码
import requests
import time

data = [1,2,3,4,5,6,7,8,9,10,11,12,13]
messages = []

def texter(message):
    if message is not None:  # 自动过滤空消息
        messages.append(message)
    return messages

def send_batch(batch):
    endpoint = 'https://api.telegram.org/TOKENHERE/sendMessage?chat_id=IDHERE&text='
    for msg in batch:
        response = requests.get(f'{endpoint}{msg}').json()
        # 可根据需求添加发送状态记录逻辑
        print(f"发送消息: {msg},响应状态: {response.get('ok')}")

def calc(data):
    result = data * 5
    # 模拟部分数据不生成消息的场景(比如数据大于10时返回None)
    return str(result) if data <= 10 else None

# 生成并缓存有效消息
for item in data:
    calc_result = calc(item)
    texter(calc_result)

# 分批限流发送
batch_size = 7
total = len(messages)
for i in range(0, total, batch_size):
    current_batch = messages[i:i+batch_size]
    print(f"发送第{i//batch_size +1}批,共{len(current_batch)}条消息")
    send_batch(current_batch)
    # 非最后一批则等待60秒
    if i + batch_size < total:
        print("等待60秒后发送下一批...")
        time.sleep(60)

关键实现说明

  • 空消息过滤:在texter函数中增加非空判断,自动剔除calc返回的None/Null项,满足要求3。
  • 安全分批:用range(0, total, batch_size)遍历,配合列表切片messages[i:i+batch_size],无论消息总数多少,都不会出现索引越界问题,自动处理13条分7+6这类场景。
  • 限流控制:每批发送完成后,判断是否还有剩余消息,有则等待60秒再发送下一批,严格遵守每分钟最多7条的规则。
  • 无重复发送:按顺序遍历缓存列表,每条消息仅发送一次;若需要随机发送,可在分批次前添加以下处理:
    import random
    # 去重并打乱顺序
    unique_msgs = list(set(messages))
    random.shuffle(unique_msgs)
    # 后续用unique_msgs代替messages进行分批发送
    
  • 不修改calc逻辑:完全保留原calc函数的处理逻辑,仅在调用时处理其返回值,符合要求4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:10:28