Я разрабатывал приложение на gae с использованием python 2.7, вызов 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 секунд, чтобы сделать это. Я думал, что запуск двух потоков одновременно займет одно и то же время, чтобы завершить обе задачи, но это занимает почти в три раза больше времени.. это делает всю идею потоковой передачи бесполезной, поскольку было бы быстрее делать их последовательно!
чего мне тут не хватает..