API-интерфейс API-интерфейса App Engine медленнее, чем собственный питон

Я использую API сокетов AE, и я выполнил следующий тест:

class TestHandler(webapp.RequestHandler): def get(self): size = 1024 * 4 start = datetime.datetime.now() for _ in range(10): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('some.ip.here', 12345)) sock.send('some dummy data') data = '' newData = 'dummy' while newData != '' and not newData.endswith('\r\n'): newData = sock.recv(size) #print newData data += newData print '.' sock.close() #print 'timespent:' + str(datetime.datetime.now() - start) logging.info('timespent:' + str(datetime.datetime.now() - start)) 
  • Экземпляр App Engine: 0: 00: 04.022290 и 0: 00: 04.209410
  • Локальная среда Python: 0: 00: 00.509000 и 0: 00: 00.511000

Я начал делать некоторые тесты после того, как заметил, что один запрос занимает от 400 мс до 500 мс. Сервер, отвечающий за запрос, находится в экземпляре Google GCE. Запрос обрабатывается в таймфрейме, который составляет в среднем 0: 00: 00.0005 сек. Поэтому большая часть задержки связана с сетью. Я думаю, что приятное время отклика будет 100 мс. Я мог бы даже сделать с 200 мс, если бы знал, что для этого потребуются некоторые тяжелые вещи. Но я не вижу, что это должно быть иначе, за исключением некоторых вещей безопасности. Но это запретит некоторые функции, которые не замедляют работу.

Может ли кто-нибудь объяснить, почему разница настолько велика?

One Solution collect form web for “API-интерфейс API-интерфейса App Engine медленнее, чем собственный питон”

Я потратил довольно много времени, пытаясь воспроизвести эту проблему, с конкретными , публичными сайтами, и, похоже, я просто не могу.

Моя версия вашего кода (настолько обогащена, что на самом деле работает и показывает результаты) …:

 import datetime import logging import socket import webapp2 class TestHandler(webapp2.RequestHandler): def get(self): size = 1024 * 4 start = datetime.datetime.now() for _ in range(10): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('216.58.216.4', 80)) sock.send('GET / HTTP/1.0\n\r\n\r') data = '' newData = 'dummy' while newData != '' and not newData.endswith('\r\n'): newData = sock.recv(size) #print newData data += newData print '.' sock.close() msg = 'timespent:{} for:{}'.format( datetime.datetime.now() - start, len(data)) logging.info(msg) self.response.write('<p>{}</p>'.format(msg)) app = webapp2.WSGIApplication([ ('/timit', TestHandler), ], debug=True) 

Этот IP-номер один для http://www.google.com (лучше было бы использовать имя узла www.google.com на своем месте, но вы указали номер IP, чтобы я это пробовал), и взаимодействие, конечно, просто получает его с древним протоколом HTTP 1.0.

Результаты меняются, но довольно типичным является то, что я получил сейчас:

 timespent:0:00:02.748760 for:52823 

Я получаю примерно одинаковые числа, выполняемые локально с dev_appserver.py поскольку я загружаю и запускаю из <myappid>.appspot.com .

Поэтому я сделал версию полностью независимой от GAE:

 import datetime import logging import socket def doit(): size = 1024 * 4 start = datetime.datetime.now() for _ in range(10): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('216.58.216.4', 80)) sock.send('GET / HTTP/1.0\n\r\n\r') data = '' newData = 'dummy' while newData != '' and not newData.endswith('\r\n'): newData = sock.recv(size) #print newData data += newData print '.' sock.close() msg = 'timespent:{} for:{}'.format( datetime.datetime.now() - start, len(data)) logging.info(msg) print('<p>{}</p>'.format(msg)) doit() 

и угадайте, что – запустив его, после кучки точек, показывает мне очень сопоставимые

 <p>timespent:0:00:02.421856 for:52853</p> 

Поэтому я не знаю, что делать дальше. Может быть, была проблема год назад, когда вы сделали свое наблюдение, и теперь это исчезло; возможно, это связано с географическим расположением конкретного IP-адреса, к которому вы подключаетесь (рядом с вашей локальной машиной, далеко от того, где работает ваше приложение GAE); кто знает – без дополнительной информации и конкретных IP-адресов, это действительно полная, слепая догадка о том, что вы наблюдали.

В моем случае моя локальная машина, где я сейчас сижу, находится в Саннивейле, Калифорния, и я уверен, что две службы Google в игре (www.google.com и myapp.appspot.com) с точки зрения сетевой латентности , не может быть так далеко отсюда (мои пинги в среднем 50 или 60 мс).

Было бы неплохо получить какое- то закрытие для этого, наивысшее голосование за «неотвеченные» вопросы с Google-приложением …! -)

  • Лучший полнотекстовый поиск для google-app-engine
  • Как мне управлять сторонними библиотеками Python с помощью Google App Engine? (virtualenv? pip?)
  • UnsupportedAlgorithm: этот бэкэнд не поддерживает эту сериализацию ключей. - Криптография Python load_pem_private_key
  • Можно ли установить «Cache-Control: public» при отправке «304 Not Modified» для изображений, хранящихся в хранилище данных
  • Python: могут ли подклассы перегружать унаследованные методы?
  • Поиск Google возвращает None 302 на AppEngine
  • erlang на движке Google?
  • Как правильно обрабатывать неправильный ключ urlsafe?
  • Python - лучший язык программирования в мире.