python - Google Cloud App Engine 灵活的 Python 2.7 环境错误启动新线程

标签 python google-app-engine nginx google-cloud-platform google-app-engine-python

我知道足够的 DevOps 是危险的。我已经成功地将一个非常简单的 python Flask 应用程序部署到 App Engine,该应用程序基本上将收到的发布数据作为消息发布到 PubSub。它与 Google 的 sample code 几乎相同这样做。唯一的区别是它使用我通过应用程序存储库推送的服务帐户来访问 PubSub 来规避 this issue .

到目前为止工作得很好,但我开始在 threading.py 中启动新线程时看到极少数错误:

1)

Traceback (most recent call last):
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 33, in grpc._cython.cygrpc._spawn_callback_async
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 24, in grpc._cython.cygrpc._spawn_callback_in_thread
  File "/usr/lib/python2.7/threading.py", line 736, in start
    _start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread

2)

Traceback (most recent call last):
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 33, in grpc._cython.cygrpc._spawn_callback_async
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 24, in grpc._cython.cygrpc._spawn_callback_in_thread

3)

Traceback (most recent call last):
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 33, in grpc._cython.cygrpc._spawn_callback_async
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 33, in grpc._cython.cygrpc._spawn_callback_async
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 24, in grpc._cython.cygrpc._spawn_callback_in_thread
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 24, in grpc._cython.cygrpc._spawn_callback_in_thread
  File "/usr/lib/python2.7/threading.py", line 736, in start
  File "/usr/lib/python2.7/threading.py", line 736, in start

我有 2 个问题,按重要性排列:

  1. 这个应用程序基本上需要 100% 的正常运行时间才能不丢失数据(如果我的服务器端出现错误,客户端会尝试重试)。这些错误是否属于 App Engine 管理应用程序资源的内部错误,并且不会导致处理实际请求时出现错误?如何确定我是否曾响应过 HTTP 错误/未成功处理请求?我在 nginx 日志中没有看到任何错误...这是我需要查看是否有任何失败的地方吗?
  2. 有办法修复此错误吗?

最佳答案

https://github.com/GoogleCloudPlatform/google-cloud-python/blob/master/pubsub/google/cloud/pubsub_v1/publisher/client.py#L143

看起来 publisher.publish(topic_path, data=data) 是一个异步操作,返回一个 concurrent.futures.Future 对象

您是否尝试调用 Future 的 result()https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Future.result

这将阻塞,直到 future 的对象成功、失败或超时。

然后您可以将该结果作为 HTTP 响应转发。

希望结果对象能为您提供有关错误的更多信息。

关于python - Google Cloud App Engine 灵活的 Python 2.7 环境错误启动新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51386090/

相关文章:

python - 使用 Python 加载 CloudFormation YAML

Python Queue 在 get() 后不会释放内存

Java App Engine DatastoreService 还是 PersistenceManager?

java - 我可以将 Google 的数据存储区用于桌面应用程序吗?

python - Django1.2/google-appengine 调试 "KeyError: ' REQUEST_METHOD“错误

php - PHP的上传进度功能真的有效吗?

node.js - 卷未安装到 nginx 容器中

nginx - 如何在Nginx上配置ETag

python - 仅当调用字典键时才生成数据

javascript - Ajax 返回整页