我正在使用 python 2.7 在 gae 上开发一个应用程序,一个 ajax 调用从 API 请求一些数据,单个请求可能需要约 200 毫秒,但是当我打开两个浏览器并在非常接近的时间发出两个请求时,它们花费的时间比双倍的,我尝试将所有内容放入线程中,但它不起作用..(这种情况发生在应用程序在线时,而不仅仅是在开发服务器上)
所以我写了这个简单的测试来看看这是否是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、core 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 秒才能完成此操作..我认为同时启动两个线程将花费相同的时间来完成这两项任务,但它几乎需要三倍的时间..这使得整个线程思想毫无用处,因为依次进行会更快!
我在这里缺少什么..