什么';这两个简单的python代码有什么不同?(一个工作,另一个不工作)

什么';这两个简单的python代码有什么不同?(一个工作,另一个不工作),python,numpy,multiprocessing,Python,Numpy,Multiprocessing,上面的代码是一个简单的python代码,它通过多重处理计算随机采样矩阵的逆。但是,下面的代码不起作用 import os import numpy as np import time from multiprocessing import Process, current_process def doubler(number): result = number * 2 proc_name = current_process().name print('{0} doub

上面的代码是一个简单的python代码,它通过多重处理计算随机采样矩阵的逆。但是,下面的代码不起作用

import os
import numpy as np
import time
from multiprocessing import Process, current_process


def doubler(number):
    result = number * 2
    proc_name = current_process().name
    print('{0} doubled to {1} by: {2}'.format( number, result, proc_name))

def solve_inverse(np_ndarray_square_matrix):
    inverse_matrix=np.linalg.inv(np_ndarray_square_matrix)
    proc_name = current_process().name
    print('process name :',proc_name,'       ',inverse_matrix)


if __name__=='__main__':
    start_time=time.time()

    dim=100
    thread_num=10

    matrice = [np.random.normal(loc=1.0 , scale=5.0 , size=(dim,dim)) for _ in range(thread_num)]
    procs = []

    for index, matrix in enumerate(matrice):
        proc = Process(target=solve_inverse , args=(matrix,))
        procs.append(proc)
        proc.start()

    for proc in procs:
        proc.join()

    end_time=time.time()

    print('time length :',end_time-start_time)
唯一的区别是是否有
如果
存在。
据我所知,
if\uuuuuuu name\uuuu==”\ uuuuu main\uuuu:
识别此模块是由其他模块导入的还是此模块自身运行的。所以我认为实际上,决定计算机应该做什么的两个代码之间并没有区别。有什么问题吗?

如果多处理模块需要使用
。具体见:

主模块的安全导入

确保新的Python解释器可以安全地导入主模块,而不会产生意外的副作用(例如启动新进程)


具体来说,每次创建子进程时,该进程都是从导入脚本开始的(就像您可能
将numpy导入为np

如果您不在
下阻止脚本中生成新进程的部分,那么所有这些子进程在导入脚本时都会生成自己的子进程,这将生成自己的子进程,依此类推,直到您。嗯


堆栈溢出。没有人喜欢他们

还有一个问题!第一个代码似乎没有“多重处理”,我的意思是,当我观察代码从开始到结束所花费的时间时,多重处理似乎没有同时工作。当我增加多重处理次数时,时间与多重处理次数成线性增加。我不知道发生了什么事!请帮帮我!这些答案会有帮助,
import os
import numpy as np
import time
from multiprocessing import Process, current_process


def doubler(number):
    result = number * 2
    proc_name = current_process().name
    print('{0} doubled to {1} by: {2}'.format( number, result, proc_name))

def solve_inverse(np_ndarray_square_matrix):
    inverse_matrix=np.linalg.inv(np_ndarray_square_matrix)
    proc_name = current_process().name
    print('process name :',proc_name,'       ',inverse_matrix)


start_time=time.time()

dim=3
thread_num=10

matrice = [np.random.normal(loc=1.0 , scale=5.0 , size=(dim,dim)) for _ in range(thread_num)]
procs = []

for index, matrix in enumerate(matrice):
    proc = Process(target=solve_inverse , args=(matrix,))
    procs.append(proc)
    proc.start()

for proc in procs:
    proc.join()

end_time=time.time()

print('time length :',end_time-start_time)