【问题标题】:Can’t issue http request from Google App Engine instance (python37/gunicorn) to itself无法从 Google App Engine 实例 (python37/gunicorn) 向自身发出 http 请求
【发布时间】:2021-10-12 08:38:02
【问题描述】:

我作为 GAE 实例的一部分加载的外部 Python 模块无法再向其自身(同一个 GAE 实例)发出 HTTP(s) 请求。它过去一直工作,但最近它停止工作。传出请求(对自身)正在超时。由于是第三方模块,我不能修改它的代码,只能修改它使用的URL。

我还尝试访问0.0.0.0:8080,WSGI 应用程序监听的端口和地址。也没有成功。

我阅读了关于使用 urlfetch 或通过 HTTP 标头进行身份验证的旧 Python 运行时行为,但这些都不再适用,因为对于新的 python37 运行时,建议使用 Python 的 requests 模块,我也想坚持。

知道从哪里开始寻找吗?我似乎什么都试过了。

【问题讨论】:

  • 了解您正在使用的 Python 版本会非常有帮助,它是第三方模块和您正在尝试的代码示例。据我了解,这可能与您正在使用的模块或 Python 版本中的可能弃用有关,因为 Python2 已被弃用,并且我在 docs 中发现的内容与 Python2 一起使用,所以如果你是尝试在您的代码中将此库从 Python2 导入 Python3,您将需要使用另一个库,因为 App Engine 不支持该库。
  • 是的。我确实说过我使用python37 运行时。外部模块也是我自己的,叫typeworld,都是纯Python 3代码。尝试访问服务器的特定行在这里:github.com/typeworld/typeworld/blob/… 当然,它尝试连接到自己有点尴尬,但该模块通常不打算在服务器上运行,而是嵌入在 GUI 应用程序中。我只是也在网上使用它。您可以在该行上方看到我当前的解决方法:直接访问主 flask
  • 您好,如果您可以添加任何 Python 代码和您看到的错误输出的堆栈跟踪,将会很有帮助。我们需要哪些重现步骤来重现它?

标签: python google-app-engine python-requests gunicorn


【解决方案1】:

在另一个帖子中经过大量研究找到了答案:Gunicorn doesn't allow requesting urls on the same server instance

由于死锁,需要多个 gunicorn 工作人员才能连接到自己,例如gunicorn -b :8888 -w 2 app:app.

在 Google App Engine 标准环境中拥有多个工作器需要 F2 或更高的实例类。您可以设置跟随您的实例类的工作人员数量:https://cloud.google.com/appengine/docs/standard/python3/runtime#entrypoint_best_practices

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多