Python使用事件循环创建线程池和进程池
1、来源参考
参考官方文档示例 :https://docs.python.org/3.9/library/asyncio-eventloop.html#asyncio.loop.run_in_executor
2、代码示例
1 # -*- coding: utf-8 -*- 2 """ 3 File Name : test 4 Description : 5 Author : Administrator 6 date : 2022/9/24 7 Change Activity : 2022/9/24: 8 """ 9 import concurrent.futures 10 import time 11 import asyncio 12 13 14 def task_func(): 15 time.sleep(3) 16 return 'task_func finish' 17 18 19 async def main(): 20 # 获取当前的事件循环对象 21 loop = asyncio.get_running_loop() 22 23 # 事件循环,使用线程池运行任务 24 future_obj = loop.run_in_executor(None, task_func) 25 result = await future_obj 26 print('默认使用线程池运行,运行结果:', result) 27 28 # 自定义线程池,使用事件循环执行 29 with concurrent.futures.ThreadPoolExecutor() as pool: 30 future_obj = loop.run_in_executor(pool, task_func) 31 result = await future_obj 32 print('自定义使用线程池运行,运行结果:', result) 33 34 # 自定义进程池,使用事件循环执行 35 with concurrent.futures.ProcessPoolExecutor() as pool: 36 future_obj = loop.run_in_executor(pool, task_func) 37 result = await future_obj 38 print('自定义进程运行,运行结果:', result) 39 40 41 if __name__ == '__main__': 42 asyncio.run(main())
3、运行结果
默认使用线程池运行,运行结果: task_func finish
自定义使用线程池运行,运行结果: task_func finish
自定义进程运行,运行结果: task_func finish
4、总结:
主要用于使用事件循环来创建线程池或进程池运行