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