Jmeter并发与事件生成:900个1秒间隔采样事件分批发送实现咨询
结论先行
这个需求不需要额外使用多并发线程,单线程配合串行等待逻辑就可以稳定实现,引入多线程反而会增加批次同步的不必要复杂度,甚至出现批次发送顺序错乱的问题。
具体实现方案
1. 事件数组分片
首先把900条的事件数组按每60条为一组做拆分,刚好可以生成15个完整批次,无剩余数据。
不同语言的分片实现参考:
- Python:
# events 为你的原始事件列表 batch_list = [events[i:i+60] for i in range(0, len(events), 60)]
- JavaScript:
// events 为你的原始事件数组 const batchList = Array.from({length: Math.ceil(events.length / 60)}, (_, i) => events.slice(i * 60, i * 60 + 60))
2. 串行批次发送
按顺序遍历拆分好的批次列表,每个批次发送时必须等待当前批次全部事件发送完成后,再触发下一个批次的发送:
- 如果用同步IO发送接口:直接遍历发送即可,天然是串行执行,上一个批次发送完才会执行下一个批次的代码
- 如果用异步IO发送接口:需要给每个批次的发送加等待逻辑,比如Python用
await、JavaScript用Promise.all等待当前批次所有请求返回后再进入下一轮循环
3. 可选可靠性优化
- 单个批次发送失败时,增加重试逻辑,重试超过指定次数后终止流程并记录错误,避免后续无效发送
- 每完成一个批次就记录当前发送进度,程序异常重启后可以从断点继续发送,不需要从头开始
- 批次内部如果需要加快发送速度,可以对60条事件开并发请求,但必须严格保证批次之间的串行关系,不能跨批次并发
多线程必要性说明
完全不需要引入多线程,原因如下:
- 核心需求要求批次串行执行,多线程的并发能力在这里没有发挥空间,反而需要额外加锁、同步逻辑保证批次顺序,大幅提升代码复杂度
- 整个流程的瓶颈是网络IO延迟,不是CPU计算,哪怕要做批次内的并发发送,用IO多路复用(async/await、协程)就可以实现,不需要多线程的资源开销
内容的提问来源于stack exchange,提问作者sman
相关产品推荐
相关产品推荐

