我正在使用 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 cores, 8 threads), 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 秒来执行此操作.. 我认为同时启动两个线程将需要相同的时间来完成这两个任务,但它几乎需要三倍的时间.. 这使得整个线程的想法毫无用处,因为按顺序进行会更快!
我在这里想念什么..