当我处理低延迟需求时,我try 使用多处理池,每个进程并行运行,在我的示例中需要1秒.但整个过程是额外的300ms,即1秒300ms.
为什么要增加额外的时间?有没有更好的方法来降低吞吐量?
我提到了这个solution,它具有最大2ms
(平均值为0.1ms
)的吞吐量,但不适用于我的代码(即,使用PANDA READ_SQL从数据库获取数据)
我假设会有更好的方法来减少额外的管理时间.
Code:个
import multiprocessing as mp
from multiprocessing import Pool
def test_func(x):
ts = time.time()
time.sleep(1) # In my case `pd.read_sql(query, conn_str)` which takes around 300ms
print(time.time() - ts)
return x
ts = time.time()
num_process = mp.cpu_count()*2
with Pool(num_process) as pool:
results = pool.map(test_func, [1, 2, 3])
print("*********")
print(time.time() - ts)
print("*********")
print(time.time() - ts)
Output:个
1.0009253025054932 # each process taken time
1.0011048316955566
1.0010230541229248
*********
1.2178916931152344 # time taken inside pool context manager
*********
1.2484805583953857 # total time
可用进程数:
mp.cpu_count()*2 --> 32
有没有可能使总时间更接近1秒?若有,如何处理?