线程池示例

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/flyDeDog/article/details/85612878
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()

猜你喜欢

转载自blog.csdn.net/flyDeDog/article/details/85612878