多线程系列:concurrent.futures

多线程系列: concurrent.futures

简单的多线程任务通过concurrent.futures库来管理更加方便,可以参数化控制线程数和简化一些操作。

示例代码

import concurrent.futures
import time
from pprint import pprint

# 定义分类和分割模型函数
def classify_model_1(image_path, result_dict):
    # 模拟分类操作
    time.sleep(1)
    print("classify_model_1")
    result_dict[f"模型1分类结果_{image_path}"] = f"模型1分类结果: {image_path}"

def classify_model_2(image_path, result_dict):
    # 模拟分类操作
    time.sleep(1)
    print("classify_model_2")
    result_dict[f"模型2分类结果_{image_path}"] = f"模型2分类结果: {image_path}"

def segment_model_1(image_path, result_dict):
    # 模拟分割操作
    time.sleep(1)
    print("segment_model_1")
    result_dict[f"模型1分割结果_{image_path}"] = f"模型1分割结果: {image_path}"

def segment_model_2(image_path, result_dict):
    # 模拟分割操作
    time.sleep(1)
    print("segment_model_2")
    result_dict[f"模型2分割结果_{image_path}"] = f"模型2分割结果: {image_path}"

# 线程执行函数
def process_image(image_path, result_dict, result_key):
    # 使用 ThreadPoolExecutor 来创建分类模型和分割模型的线程
    with ThreadPoolExecutor(max_workers=4) as executor:
        futures = [
            executor.submit(classify_model_1, image_path, result_dict),
            executor.submit(classify_model_2, image_path, result_dict),
            executor.submit(segment_model_1, image_path, result_dict),
            executor.submit(segment_model_2, image_path, result_dict)
        ]

        # 等待所有分类模型线程完成
        for future in futures:
            future.result()

# 主函数
if __name__ == "__main__":
    tic = time.time()
    # 假设我们有一个图像路径列表
    image_paths = [
        "image1.jpg",
        "image2.jpg",
    ]

    result_dict = {}
    with ThreadPoolExecutor(max_workers=2) as executor:
        threads = [
            executor.submit(process_image, image_path, result_dict, i)
            for i, image_path in enumerate(image_paths)
        ]

        # 等待所有线程完成
        for future in as_completed(threads):
            future.result()

    # 输出结果
    for key, value in result_dict.items():
        pprint(value)

    toc = time.time()
    run_time = toc - tic
    print("程序运行时间:", run_time)

结果示例

# segment_model_1
# classify_model_2
# segment_model_2
# segment_model_1
# segment_model_2
# classify_model_1
# classify_model_2
# classify_model_1
# '模型1分割结果: image2.jpg'
# '模型2分类结果: image2.jpg'
# '模型2分割结果: image1.jpg'
# '模型1分割结果: image1.jpg'
# '模型2分割结果: image2.jpg'
# '模型1分类结果: image2.jpg'
# '模型2分类结果: image1.jpg'
# '模型1分类结果: image1.jpg'
# 程序运行时间: 1.1142146587371826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值