我正在使用Python 2.7在gae上开发一个应用程序,其中一个ajax调用从API请求一些数据,单个请求可能需要约200毫秒,但是当我打开两个浏览器并在非常接近的时间内进行两个请求时,它们所需的时间超过了两倍以上。我尝试将所有内容放在线程中,但没有效果...(只有应用程序在线时才会出现这种情况,而不仅仅是在开发服务器上)
因此,我编写了这个简单的测试以查看这是否是Python普遍存在的问题(在忙等待的情况下),以下是代码和结果:
在Mac OS X上,核心i7(4核,8线程),Python2.7的结果是:
这真的很令人震惊!如果一个线程需要5秒钟才能完成这个任务...我以为同时启动两个线程将需要同样的时间来完成两项任务,但实际上需要近三倍的时间...这使整个线程的想法变得毫无用处,因为按顺序执行它们会更快!在这里我错过了什么?
因此,我编写了这个简单的测试以查看这是否是Python普遍存在的问题(在忙等待的情况下),以下是代码和结果:
def work():
t = datetime.now()
print threading.currentThread(), t
i = 0
while i < 100000000:
i+=1
t2 = datetime.now()
print threading.currentThread(), t2, t2-t
if __name__ == '__main__':
print "single threaded:"
t1 = threading.Thread(target=work)
t1.start()
t1.join()
print "multi threaded:"
t1 = threading.Thread(target=work)
t1.start()
t2 = threading.Thread(target=work)
t2.start()
t1.join()
t2.join()
在Mac OS X上,核心i7(4核,8线程),Python2.7的结果是:
single threaded:
<Thread(Thread-1, started 4315942912)> 2011-12-06 15:38:07.763146
<Thread(Thread-1, started 4315942912)> 2011-12-06 15:38:13.091614 0:00:05.328468
multi threaded:
<Thread(Thread-2, started 4315942912)> 2011-12-06 15:38:13.091952
<Thread(Thread-3, started 4323282944)> 2011-12-06 15:38:13.102250
<Thread(Thread-3, started 4323282944)> 2011-12-06 15:38:29.221050 0:00:16.118800
<Thread(Thread-2, started 4315942912)> 2011-12-06 15:38:29.237512 0:00:16.145560
这真的很令人震惊!如果一个线程需要5秒钟才能完成这个任务...我以为同时启动两个线程将需要同样的时间来完成两项任务,但实际上需要近三倍的时间...这使整个线程的想法变得毫无用处,因为按顺序执行它们会更快!在这里我错过了什么?