版权声明:本文为博主原创文章,转载请注明出处 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()