gpt4 book ai didi

python - App Engine Socket API 因子比原生 python 慢 8

转载 作者:太空狗 更新时间:2023-10-30 00:17:30 25 4
gpt4 key购买 nike

我正在使用 AE 套接字 API 并且我已经完成了以下测试:

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 毫秒后,我开始进行一些测试。响应请求的服务器位于谷歌 GCE 实例上。请求在平均 0:00:00.0005 秒的时间范围内处理。所以大部分延迟都与网络相关。我认为一个不错的响应时间是 100 毫秒。如果我知道这需要一些困难的东西,我什至可以用 200 毫秒来完成。但我认为除了一些安全性内容外,它应该没有任何不同。但这会禁止某些功能,但不会使其变慢。

谁能解释为什么差异这么大?

最佳答案

我已经花了很多时间尝试通过具体、公共(public)站点重现此问题,但似乎我做不到。

我的代码版本(足够丰富,可以运行并显示结果)...:

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 号是 www.google.com 的一个(最好使用主机名 www.google.com 代替它,但您指定了一个 IP 号,所以我试过了)并且交互当然只是越来越它的主页采用古老的 HTTP 1.0 协议(protocol)。

结果各不相同,但我刚才得到的是一个非常典型的结果:

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)正在发挥作用,就术语而言的网络延迟,不能离这里那么远(我的 ping 平均为 50 或 60 毫秒)。

很高兴为此得到某种的关闭,“未回答”的谷歌应用程序引擎问题中投票最高的...! -)

关于python - App Engine Socket API 因子比原生 python 慢 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com