首页 > 解决方案 > apply_sync 与串行速度相同

问题描述

我有一个在 CPU 上需要 128 毫秒的函数,我尝试将它并行化,但它具有相同的效果,根本没有加速。我不确定我在那里做错了什么。

这是计算成本高的函数:

def compute(id, x,y,frame_id,df_region, region_buffered, df_line):
    gb = ('trajectory_id',)
    global general_pd
    general_pd.loc[len(general_pd)] = [id, x,y, frame_id]
    grouped = general_pd.loc[general_pd['trajectory_id'] == id]


    rpp = RawParameterProcessor(grouped, df_line, frame_idx, df_region, region_buffered,  gb=gb, v_thresh=5 / 3.6)

    df_parameter_car = rpp.compute()

    return df_parameter_car

我在 tensorflow 对象检测中使用它,对检测到的对象执行计算:

请注意,以下代码在主循环中执行,我从 cv2 视频捕获中获取该数据。

对于视频捕获的每一帧

for trk in car_detections:
    trk = trk.astype(np.int32)
    p = np.array([[((trk[1] + trk[3]) / 2,  (trk[0] + trk[2]) / 2)]], dtype=np.float32)
    center_pt = cv2.perspectiveTransform(p, H)
    ptx = center_pt.T.item(0)
    pty = center_pt.T.item(1)
    df_cars = pool.apply_async(compute, (trk[4], ptx, pty, frame_idx, df_region, region_buffered, df_line,))
    results.append(df_cars)
    for result in results:
        genera_data_pd_cars = genera_data_pd_cars.append(result.get())

标签: pythonmultiprocessing

解决方案


推荐阅读