pool.apply_async这么长时间才能完成,如何加速?



我用 14 个内核调用 pool.apply_async((。

import multiprocessing 
from time import time
import timeit
informative_patients = informative_patients_2500_end[20:]
pool = multiprocessing.Pool(14)
results = []
wLength = [20,30,50]
start = time()
for fn in informative_patients:
result = pool.apply_async(compute_features_test_set, args = (fn, 
wLength), callback=results.append)
pool.close()
pool.join()

stop = timeit.default_timer()
print stop - start 

问题是它在不到一个小时的时间内完成了对前 13 个数据的调用 compute_features_test_set(( 函数,但完成最后一个数据需要一个多小时。所有 14 个数据集的数据大小相同。我尝试将pool.terminate((放在pool.close((之后,但在这种情况下,它甚至不会启动池并立即终止池而不进入for循环。这总是以同样的方式发生,如果我使用更多的内核和更多的数据集,最后一个总是需要很长时间才能完成。我的 compute_features_test_set(( 函数是一个简单的特征提取代码,可以正常工作。我在装有Linux Red hat 6,python 2.7和jupyter的服务器上工作。计算时间对我来说很重要,我的问题是这里出了什么问题,我如何修复它以在合理的时间内完成所有计算?

问题:... 这里有什么问题以及如何解决它

无法将此视为multiprocessing问题。
但是你怎么得到这个:">总是最后一个需要这么长时间才能完成">
您使用的是callback=results.append而不是自己的function
编辑您的问题并显示您如何timeit一个处理时间。
同时将您的 Python 版本添加到您的问题中。

执行以下操作以验证这不是数据问题

start = time()
results.append(
compute_features_test_set(<First informative_patients>, wLength
)
stop = timeit.default_timer()
print stop - start 
start = time()
results.append(
compute_features_test_set(<Last informative_patients>, wLength
)
stop = timeit.default_timer()
print stop - start 

比较你得到的两个时间。

相关内容

  • 没有找到相关文章