[英]what's different between these two simple python codes? (one works and the other doesn't work)
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)
上面的代码是一个简单的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)
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)
唯一的区别是是否存在if __name__=='__main__:
据我所知, if __name__=='__main__:
识别此模块是由另一个模块导入的,还是该模块本身运行的。 因此,我认为确定两个计算机应该做什么之间实际上没有什么区别。 怎么了?
if __name__ == '__main__':
多处理模块需要工作。 请参阅编程指南 ,特别是:
安全导入主模块
确保可以由新的Python解释器安全地导入主模块,而不会引起意外的副作用(例如,启动新进程)。
具体来说,每次创建子进程时,该进程都会从导入脚本开始(就像您import numpy as np
)。
如果不阻止在if __name__='__main__':
下生成新进程的脚本部分,则所有这些子进程在导入脚本时都会产生自己的子子进程,这将产生自己的子进程。子子子过程等等,直到您拥有为止。 。 。 好 。 。 。
堆栈溢出。 没有人喜欢他们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.