Pythonで2つの長時間実行操作を同時に実行しようとしています。どちらも同じデータセットで動作しますが、変更はしません。スレッド化された実装は、単に次々に実行するよりも実行が遅いことがわかりました。
私が経験していることを示すために、簡単な例を作成しました。
このコードを実行し、46行目をコメント化すると(スレッド化された操作を実行するようになります)、私のマシンでの実行時間は約1:01(分:秒)になります。2つのCPUがフル実行時間で約50%で実行されているのがわかります。
行47をコメントアウトすると(順次計算が発生します)、実行時間は約35秒になり、1つのCPUが完全な実行時間で100%に固定されます。
両方の実行により、両方の完全な計算が完了します。
from datetime import datetime
import threading
class num:
def __init__(self):
self._num = 0
def increment(self):
self._num += 1
def getValue(self):
return self._num
class incrementNumber(threading.Thread):
def __init__(self, number):
self._number = number
threading.Thread.__init__(self)
def run(self):
self.incrementProcess()
def incrementProcess(self):
for i in range(50000000):
self._number.increment()
def runThreaded(x, y):
x.start()
y.start()
x.join()
y.join()
def runNonThreaded(x, y):
x.incrementProcess()
y.incrementProcess()
def main():
t = datetime.now()
x = num()
y = num()
incrementX = incrementNumber(x)
incrementY = incrementNumber(y)
runThreaded(incrementX, incrementY)
#runNonThreaded(incrementX, incrementY)
print x.getValue(), y.getValue()
print datetime.now() - t
if __name__=="__main__":
main()