求助:实现带每分钟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
相关产品推荐
相关产品推荐

