我试图在 python 中同时运行两个长时间运行的操作。它们都对相同的数据集进行操作,但不对其进行修改。我发现线程实现的运行速度比简单地一个接一个地运行要慢。
我创建了一个简化的示例来展示我正在经历的事情。
运行此代码并注释第 46 行(使其执行线程操作),导致我的机器上的运行时间约为 1:01(分:秒)。我看到两个 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()