import time
import random
import logging
import multiprocessing
def execute_method(index, *args):
print(f'---- 任务{index}开始,参数:{args}')
if index % 5 == 0:
raise TimeoutError(f'X 任务{index}异常抛出')
if index % 3 == 0:
raise IOError(f'X 任务{index}异常抛出')
time.sleep(5)
return index
def handle_result(r):
"""
正常结束的回调
:param r: 目标函数的 return,若没有则为None
:return:
"""
logger.info(f'√ 任务结束,返回:{r}')
def handle_exception(e: Exception):
"""
异常抛出时的回调
:param e: 抛出的异常信息
:return:
"""
logger.error(f'{e.__class__}:{e}')
if __name__ == '__main__':
# 日志记录
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.FileHandler(filename=r'.\r.log', encoding='utf-8')])
logger = logging.getLogger(__name__)
str_pool = 'abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ'
p = multiprocessing.Pool(5) # 初始化进程池
for i in range(20):
# 添加异步进程任务
_ = p.apply_async(execute_method, (i, {str_pool[random.randint(0, len(str_pool)-1)]: random.random()}),
callback=handle_result,
error_callback=handle_exception)
p.close()
p.join()
python 基于方法调用的进程池使用方式(一)
最新推荐文章于 2024-06-20 17:54:56 发布