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代碼,它用多處理計算隨機採樣矩陣的逆。但是,下面的代碼不起作用這兩個簡單的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__:
認識到,如果這個模塊是由其他模塊導入或該模塊自己運行。所以我認爲實際上兩個代碼之間沒有區別來決定計算機應該做什麼。怎麼了?
還有一個問題!看起來第一個代碼並不是'多處理',我的意思是,當我觀察代碼從開始到結束的時間時,多處理似乎不能同時工作。當我增加多處理數量時,時間線性增加w.r.t.多處理的數量。我不知道發生了什麼!請幫幫我! – Eric
這些答案將有所幫助。 https://stackoverflow.com/a/29697273/4045933, https://stackoverflow.com/a/18205006/4045933 – SunilT