实现的效果
按照自定义的每批执行的任务数,进行线程执行和等待
执行完一批线程后,等待指定的时间后再执行
对于线程内的每个任务是无法单独设置时间的,因为线程的作用是将所有任务先创建,然后并行执行,所以通过这种方式,使其每批等待,降低请求的频率
代码演示
from concurrent.futures import ThreadPoolExecutor, as_completed
# 创建线程任务
def create_tasks(batch_size=10):
result_data_list = []
sku_data_list = ["存放数据的列表"]
for i in range(0, len(sku_data_list), batch_size):
all_tasks = []
split_list = sku_data_list[i:i + batch_size]
execute = ThreadPoolExecutor(batch_size)
for split in split_list:
all_tasks.append(execute.submit(get_data, split))
# 获取线程的返回结果
for future in as_completed(all_tasks):
result_data = future.result()
result_data_list.append(result_data)
execute.shutdown(wait=True) # 等待当前批次的线程任务全部完成
time.sleep(random.uniform(1, 3)) # 设置每批的等待时间
return result_data_list
# 获取每一个数据
def get_data(sku):
handle_data = "处理后的数据"
return handle_data
# 程序入口
if __name__ == '__main__':
batch = 10 # 每批任务的数量
get_data_list = create_tasks()