线程池示例

本文详细介绍了Python中线程池的使用,通过实例代码展示了如何创建线程池,以及如何调度任务执行,深入理解线程池在并发处理中的优势和应用场景。
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
import requests


class ConRun:
    def __init__(self, args_list, success_handle_func=lambda result_args, result: None, failed_handle_func=lambda result_args, result: None):
        """

        :param args_list: 可以从中获取发起请求或者处理结果的参数
        [
            {
                "parameters_list": {"code": 123},
                "index_code": "123",
                "result_args": {"code": 123}
            },
            ...
        ]
        :param success_handle_func:  请求成功时处理结果的参数
        :param failed_handle_func:   请求失败时处理结果的参数
        """
        self._target_address = ["127.0.0.1"]

        self._success_handle_func = success_handle_func
        self._failed_handle_func = failed_handle_func
        self._args_list = [(self._target_address[index % len(self._target_address)], args_now) for index, args_now in enumerate(args_list)]
        self._max_thread_num = len(self._target_address) * 2

        self._executor = ThreadPoolExecutor(max_workers=self._max_thread_num)

    def _start(self, args, ip, result_args):
        try:
            result = requests.post("http://" + ip + ":9999/func_index", json=args).json()
            if result and result[0]["error_code"] == 0:
                result = result[0]["result_dict"]
            else:
                raise Exception(str(result[0]["error_msg"]))
            self._success_handle_func(result_args, result)
        except Exception as e:
            result = None
            self._failed_handle_func(result_args, result)

    def start(self):
        all_task = []
        for ip, args in self._args_list:
            result_args = args.pop("result_args")
            all_task.append(self._executor.submit(self._start, args, ip, result_args))
        wait(all_task, return_when=ALL_COMPLETED)


if __name__ == "__main__":
    args_list = [
        {
            "parameters_list": {"code": 123},
            "index_code": "123",
            "result_args": {"code": 123}
        }
    ]
    ConRun(args_list).start()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值