在多个处理器上执行时挂起的示例代码



在尝试运行以下示例程序时,它挂起。我是Python多处理的新手,很难弄清楚这一点。该程序计算每行数据中给定范围内的数字数量,我正在使用中的教程https://www.machinelearningplus.com/python/parallel-processing-python/

import numpy as np
import time
import multiprocessing as mp
def howmany_within_range(row, minimum, maximum):
"""Returns how many numbers lie within `maximum` and `minimum` in a given `row`"""
count = 0
for n in row:
if minimum <= n <= maximum:
count = count + 1
return count
def main():
pool = mp.Pool(2)
# Prepare data
np.random.RandomState(100)
arr = np.random.randint(0, 10, size=[200000, 5])
data = arr.tolist()
print (data[:5])
start = time.time()
results = [pool.apply(howmany_within_range, args=(row, 4, 8)) for row in data]
pool.close()
end = time.time()
print(results[:10], end-start)
if __name__=='__main__':
main()

它"挂起"是因为您要长时间旋转一个循环。在我的电脑上,它在30秒内完成;你可能只需要给它更长的时间。

[[5, 5, 4, 0, 5], [7, 8, 5, 9, 0], [1, 4, 5, 5, 6], [8, 0, 2, 8, 0], [0, 4, 8, 5, 0]]
[4, 3, 4, 2, 3, 3, 2, 2, 1, 2] 29.42530632019043

(附带说明:我不认为您的代码现在实际上是并行运行的;我认为教程的下一部分将从apply转移到apply_async。(

相关内容

  • 没有找到相关文章

最新更新