首先,我想说我是python编程的初学者。因此,我的错误很可能很明显。我最近尝试通过使用多处理来提高代码的性能。但是我还没有成功,希望你能帮助我。
我有一个需要针对数据集的每个记录执行的计算。我总共有345条记录。对于每条记录,我的计算需要大约0.0016-0.002秒,总计0.552-0.6秒。从技术上讲,我的CPU有12个内核。因此,我希望通过并行处理来加快此计算的速度,使大约0.07到0.08秒。由于计算完全独立于其他数据记录,因此我不需要任务或共享内存之间的任何形式的同步。
我选择了multiprocessing.pool函数来实现。我的代码或多或少是这样的:
p = multiprocessing.Pool(core_num)
for record in range(0, dataset_len):
task_list.append((const1, const2, dataset[record, :], task_idx))
output = p.map(calculation_func, task_list)
p.close()
const1,const2是计算函数Calculation_func用于评估数据所需的常量。 task_idx只是一个标识符,用于在计算之后以正确的顺序携带数据。仅从
执行output = p.map(calculation_func, task_list)
在core_num = 12的情况下执行大约需要2.2秒,而在core_num = 4的情况下,我达到的最好时间是1.6秒。这两种方法都比不使用多处理而仅调用函数要慢。
我已经尝试过的:
在两种情况下,我在calculation_func()的开始和结束处都添加了time.time(),并打印了所有评估中的一个或1/12所需的时间。测量的时间与一开始的预期一样短。
问题: