我有下面的代碼:Python的多線程VS多重VS順序執行
- 第一順序執行ALONE(看註釋代碼和註釋:
import time from threading import Thread from multiprocessing import Process def fun1(): for _ in xrange(10000000): print 'in fun1' pass def fun2(): for _ in xrange(10000000): print 'in fun2' pass def fun3(): for _ in xrange(10000000): print 'in fun3' pass def fun4(): for _ in xrange(10000000): print 'in fun4' pass if __name__ == '__main__': #t1 = Thread(target=fun1, args=()) t1 = Process(target=fun1, args=()) #t2 = Thread(target=fun2, args=()) t2 = Process(target=fun2, args=()) #t3 = Thread(target=fun3, args=()) t3 = Process(target=fun3, args=()) #t4 = Thread(target=fun4, args=()) t4 = Process(target=fun4, args=()) t1.start() t2.start() t3.start() t4.start() start = time.clock() t1.join() t2.join() t3.join() t4.join() end = time.clock() print("Time Taken = ",end-start) ''' start = time.clock() fun1() fun2() fun3() fun4() end = time.clock() print("Time Taken = ",end-start) '''
我用三種方式運行上面的程序上面的代碼)
- 第二個多線程執行ALONE
- 第三個多處理執行ALONE
爲END_TIME啓動時間的觀察結果如下:
總體運行時間
- ( '拍攝時間=',342.5981313667716)---由線程執行運行時間
- ('拍攝時間=',232.94691744899296)---運行時間順序執行
- ( '拍攝時間=',307.91093406618216)由多重執行---運行時間
問:
我看到的順序執行需要最少的時間和多線程具有最高的時間。爲什麼?我無法理解,也感到驚訝的結果。請澄清。
由於這是一項CPU密集型任務,並且獲得了GIL,我的理解是 多處理時間最短,而線程執行時間最長。請驗證我的理解。