的不同的結果,我寫非常簡單的代碼:使用線程和進程
n = 0
def calculate_n(number):
global n
for i in range(number):
n += 1
print n
def print_n():
global n
print "n= "
print n
和在主:
if __name__ == '__main__':
number = 1000000
t1 = Process(target=calculate_n, args=(number,))
t1.start()
t2 = Process(target=calculate_n, args=(number,))
t2.start()
print_n()
它給出結果:
N =百萬
N =百萬
它應該是。當我在主要更改代碼,這種情況下:
number = 1000000
t1 = Thread(target=calculate_n, args=(number,))
t1.start()
t2 = Thread(target=calculate_n, args=(number,))
t2.start()
我得到不同的結果,所有的時間:
N = 1388791
N = 1390167
N = 1426284
N = 1427452
N = 1295707
N = 1297116
等。
所以第一種情況是相當簡單的。當我們執行Process時,代碼運行在不同的進程中,兩個不同的進程使用「不同的」全局變量n,並且我始終期望結果:1000000和1000000.
當我們在線程中執行它們時,全局變量n,但是我無法理解爲什麼結果總是不同的....?
希望我解釋它透明,你會幫助..
謝謝你提前!
P.S.
最重要的! 以及爲什麼它不是2 000 000?
結果應該是1 000 000 + 1 000 000 = 2 000 000
所有線程共享相同的全局變量。 – Barmar