Python-进程池Pool
import time
import os
from multiprocessing import Pool
start = time.time()
def handler(a, b):
print("开始执行...")
print(f"当前进程ID:{os.getpid()}")
time.sleep(1)
print("执行成功!")
return a + b
def call_back_func(args):
print(f"回调!当前进程ID:{os.getpid()}")
def err_call_back_func(args):
print(f"调用失败!当前进程ID:{os.getpid()}")
p = Pool(5)
for i in range(12):
p.apply_async(handler, args=(3, 4, 5), callback=call_back_func, error_callback=err_call_back_func)
p.close()
p.join()
finish = time.time()
cost = finish - start
print(f"总耗时:{round(cost, 2)}s")
"""
p.apply()同步执行结果:
开始执行...
当前进程ID:80153
执行成功!
开始执行...
当前进程ID:80154
执行成功!
开始执行...
当前进程ID:80155
执行成功!
开始执行...
当前进程ID:80156
执行成功!
开始执行...
当前进程ID:80157
执行成功!
开始执行...
当前进程ID:80153
执行成功!
开始执行...
当前进程ID:80154
执行成功!
开始执行...
当前进程ID:80155
执行成功!
开始执行...
当前进程ID:80156
执行成功!
开始执行...
当前进程ID:80157
执行成功!
开始执行...
当前进程ID:80153
执行成功!
开始执行...
当前进程ID:80154
执行成功!
总耗时:12.03s
"""
"""
异步执行:无回调
总耗时:0.02s
"""
"""
异步带有回调:正确回调:
开始执行...
当前进程ID:80297
开始执行...
当前进程ID:80298
开始执行...
当前进程ID:80299
开始执行...
当前进程ID:80300
开始执行...
当前进程ID:80301
执行成功!
执行成功!
执行成功!
执行成功!
执行成功!
开始执行...
当前进程ID:80297
开始执行...
回调!当前进程ID:80296
当前进程ID:80299
回调!当前进程ID:80296
回调!当前进程ID:80296
开始执行...
当前进程ID:80298
开始执行...
当前进程ID:80300
回调!当前进程ID:80296
开始执行...
当前进程ID:80301
回调!当前进程ID:80296
执行成功!
执行成功!
执行成功!
执行成功!
执行成功!
开始执行...
当前进程ID:80297
开始执行...
当前进程ID:80300
回调!当前进程ID:80296
回调!当前进程ID:80296
回调!当前进程ID:80296
回调!当前进程ID:80296
回调!当前进程ID:80296
执行成功!
执行成功!
回调!当前进程ID:80296
回调!当前进程ID:80296
总耗时:3.12s
"""
"""
异步带有回调:错误回调:
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
调用失败!当前进程ID:80326
总耗时:0.12s
"""