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

如何实现threading暂停功能,每次批量发送5个username直到全部发送完成

实现方案

你可以通过分批启动线程+等待批次全完成再暂停的逻辑实现需求,修改后的完整代码如下:

import threading
import time 

# 可配置参数
BATCH_SIZE = 5  # 每批并发数
PAUSE_SECONDS = 3  # 每批完成后的暂停时长,可自行调整

def api_send_req(source): 
    print(f'started thread, processing username: {source}')
    # 此处替换为实际的API发送逻辑
    time.sleep(1) # 模拟接口请求耗时,可删除
    print(f'finish processing username: {source}')


if __name__ == "__main__":
    try:
        file_path = "list.txt"
        # 用with上下文管理文件,自动释放资源
        with open(file_path, "r", encoding="utf-8") as f:
            usernames = [line.rstrip("\n") for line in f if line.strip()]
        
        # 将用户名列表按批次大小切分
        batches = [usernames[i:i+BATCH_SIZE] for i in range(0, len(usernames), BATCH_SIZE)]
        total_batches = len(batches)

        for idx, batch in enumerate(batches, 1):
            print(f"\n=== 处理第 {idx}/{total_batches} 批 ===")
            thread_list = []
            # 先创建当前批次所有线程
            for username in batch:
                # 单元素元组必须加逗号,否则会把字符串拆分为单个字符传参
                t = threading.Thread(target=api_send_req, args=(username,))
                thread_list.append(t)
            # 批量启动当前批次的所有线程
            for t in thread_list:
                t.start()
            # 阻塞主线程,等待当前批次所有线程执行完成
            for t in thread_list:
                t.join()
            
            # 最后一批处理完成后不需要暂停
            if idx != total_batches:
                print(f"当前批处理完成,暂停 {PAUSE_SECONDS} 秒后继续下一批")
                time.sleep(PAUSE_SECONDS)
        
        print("\n所有用户名已全部发送完成")

    except IOError as err:
        print(f"    ERROR -> {str(err)}")
        exit()
    except EOFError as err:
        print(f"    ERROR -> {str(err)}")
        exit()
    except IndexError as err:
        print(f"    ERROR -> {str(err)}")
        exit()
    except KeyError as err:
        print(f"    ERROR -> {str(err)}")
        exit()
    except KeyboardInterrupt:
        print("    [KILLED] By user")
        exit()

核心修改点说明

  • 新增可配置的批次大小、暂停时长参数,灵活适配不同场景需求
  • 修复原代码语法问题:修正线程传参的元组语法错误、统一threading模块的导入使用、替换了保留字list作为变量名的错误写法
  • 新增列表分块逻辑,将所有用户名按每5个一组拆分
  • 每批线程启动后调用join()方法阻塞主线程,确保当前批所有线程执行完毕后再触发暂停逻辑
  • 优化文件读取逻辑,使用with上下文管理器自动处理文件关闭,避免资源泄漏
  • 增加批次处理进度提示,方便查看运行状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 00:06:07