我是多處理/多線程模塊中的新手,我試圖檢查它是否可以提高我的程序速度。問題是它返回意外的值。我也試過threading.Thread
而不是multiprocessing.Process
,發生同樣的問題 - 運行速度比不使用另一個線程慢。多處理/多線程 - 不提高速度 - Python
在這個例子中,我使用了多處理模塊,但是當我嘗試多線程(差異在註釋中)時,它幾乎相同 下面是打印2個函數順序運行的時間和這些函數並行運行的時間:
import time
from threading import Thread
from multiprocessing import Process
import MyFile
class PerformanceTesting:
def __init__(self):
self.clss = MyFile.MyClass('A')
self.p1 = Process(target=self.f1) # I've tried also t1 = Thread(target=f1)
self.p2 = Process(target=self.f2) # I've tried also t2 = Thread(target=f2)
def f1(self):
results = self.clss.doSomething(arg,arg)
print results
def f2(self):
results = self.clss.doSomething(arg,arg)
print results
if __name__ == "__main__":
perf = PerformanceTesting()
# ATTEMPT USING MULTIPROCESSING
start = time.time()
perf.p1.start()
perf.f2()
perf.p1.join()
print time.time()-start
# ATTEMPT WITHOUT USING MULTIPROCESSING
start = time.time()
perf.f1()
perf.f2()
print time.time()-start
你能告訴我是否有可能提高這個例子的速度? 我做錯了什麼?
我有一個想法:是不是因爲分成更多的進程或線程需要幾秒鐘,所以它不能幫助在結果必須在一秒鐘內返回的情況下?
'doSomething()'方法做了什麼?它主要是I/O(例如讀寫文件,網絡等)還是CPU(數字處理,數據處理等)?在Python下,線程對前者更好,後者處理更好。 – Kevin 2014-11-06 19:45:14
@Kevin CPU(使用字符串操作),是否有區別?謝謝 – 2014-11-06 19:47:09
比'doSomething()'做的更重要的是運行需要多長時間?如果函數在很短的時間內完成,引入子進程可能不會引起顯着差異,並且可能最終變慢。 – dano 2014-11-06 19:48:13