1
我發現線程模塊比同一個任務需要更多的時間。試用線程和多處理模塊,python
import time
import threading
import multiprocessing
def func():
result = 0
for i in xrange(10**8):
result += i
num_jobs = 10
# 1. measure, how long it takes 10 consistent func() executions
t = time.time()
for _ in xrange(num_jobs):
func()
print ("10 consistent func executions takes:\n{:.2f} seconds\n".format(time.time() - t))
# 2. threading module, 10 jobs
jobs = []
for _ in xrange(num_jobs):
jobs.append(threading.Thread(target = func, args=()))
t = time.time()
for job in jobs:
job.start()
for job in jobs:
job.join()
print ("10 func executions in parallel (threading module) takes:\n{:.2f} seconds\n".format(time.time() - t))
# 3. multiprocessing module, 10 jobs
jobs = []
for _ in xrange(num_jobs):
jobs.append(multiprocessing.Process(target = func, args=()))
t = time.time()
for job in jobs:
job.start()
for job in jobs:
job.join()
print ("10 func executions in parallel (multiprocessing module) takes:\n{:.2f} seconds\n".format(time.time() - t))
結果:
10個一致FUNC處決需要:在平行
25.66 seconds
10 FUNC處決(穿線模塊)需要:
46.00 seconds
10 FUNC執行並行(多處理模塊)需要:
7.92 seconds
1)爲什麼用多處理模塊的實施工作比線程模塊更好?
2)爲什麼一致 FUNC處決花費較少的時間,然後使用線程模塊?
@AnthonySottile,謝謝,但我的問題是更廣泛的你的鏈接的問題 –
這真的不是 - 這個問題(和幾個答案)詳細說明,線程是(通常)會變得更慢(對於CPU綁定操作),因爲全局解釋器鎖定,並且多處理和線程都將有一些啓動成本。在這種情況下線程的原因是如此之慢是由於GIL和上下文切換。 –