具有嵌套循环和一些numpy函数调用的多处理

时间:2019-03-07 20:33:07

标签: python loops numpy multiprocessing nested-loops

我已经阅读了一些有关多处理的编码示例,对此仍然感到困惑。这是我人为的例子:

import numpy as np

def data_processing(x,y,z): return np.array([x,y])*(z**0.5)

def foo(n1,n2):

    final_result = {}

    for i in range(n1):
        result = np.zeros([n2,n2])

        for j1 in range(n2):
            for j2 in range(j1):
                temp= data_processing(j1,j2,i)
                result[j1,j2] = np.prod(temp)

        final_result[str(i)] = result

    return final_result

if __name__ == '__main__':
    X = foo(9,9)

如果我想在利用所有cpu内核的同时运行这段代码,应该更改什么?预先谢谢

1 个答案:

答案 0 :(得分:1)

Maby可以提供帮助。

import multiprocessing
import numpy as np
import time
import multiprocessing


def data_processing(x, y, z): return np.array([x, y]) * (z ** 0.5)


def foo(n1, n2, id=0, return_dict=[None]):
    final_result = {}

    for i in range(n1):
        result = np.zeros([n2, n2])

        for j1 in range(n2):
            for j2 in range(j1):
                temp = data_processing(j1, j2, i)
                result[j1, j2] = np.prod(temp)

        final_result[str(i)] = result

    return_dict[id] = final_result



stamp = time.time()
def pint(num):
    print(f'*Test [{num}] - seconds: {time.time() - stamp}')

for i in range(10):
    foo(90, 90)
pint(0)

stamp = time.time()

manager = multiprocessing.Manager()
return_dict = manager.dict()
processes = []

for i in range(10):
    p = multiprocessing.Process(target=foo, args=(90, 90, i, return_dict))
    processes.append(p)
    p.start()

for p in processes:
    p.join()
x0, x1, x2, x3, x4, x5, x6, x7, x8, x9 = return_dict.values()
pint(1)

我的输出是:

*Test [0] - seconds: 26.120166301727295
*Test [1] - seconds: 8.343111753463745

Process finished with exit code 0