我正在将云存储与 App Engine Flex 结合使用。部署成功后,我突然开始收到此错误消息
错误发生在我的 Flask 应用程序中的这些行中。
from google.cloud import storage, datastore
client = storage.Client()
Run Code Online (Sandbox Code Playgroud)
File "/home/vmagent/app/main.py", line 104, in _load_db
client = storage.Client()
File "/env/lib/python3.6/site-packages/google/cloud/storage/client.py", line 110, in __init__
project=project, credentials=credentials, _http=_http
File "/env/lib/python3.6/site-packages/google/cloud/client.py", line 250, in __init__
Client.__init__(self, credentials=credentials, client_options=client_options, _http=_http)
File "/env/lib/python3.6/site-packages/google/cloud/client.py", line 143, in __init__
scopes = client_options.scopes or self.SCOPE
AttributeError: 'ClientOptions' object has no attribute 'scopes'
Run Code Online (Sandbox Code Playgroud)
这与基于大量 SO 线程对 grpcio 和 google-api-core 以及 google-cloud-storage 软件包进行的重大升级有关。但是,我无法弄清楚这是在哪里发生的。
我的requirements.txt如下:
setuptools>=40.3
grpcio<=1.27.2
google-api-core<1.17.0
Flask
gevent>=0.13
gunicorn>=19.7.1
numpy>=1.18.0
numpy-financial …Run Code Online (Sandbox Code Playgroud) python python-3.x google-cloud-storage google-cloud-platform grpc-python
作为API调用的一部分,我在Google App Engine上运行了一个功能.结构是这样的
import externalmod
...
...
@app.route('/calc_here')
def calc:
answer = externalmod.Method()
return answer
Run Code Online (Sandbox Code Playgroud)
函数externalmod是一个复杂的算法(不是数据存储区,不是urlfetch,只是纯python),它适用于桌面上的每种可能情况,但对于app引擎上的一些输入情况,当调用端点时会出现以下错误
{
"code": 13,
"message": "BAD_GATEWAY",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "application"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在查看https://cloud.google.com/appengine/articles/deadlineexceedederrors并进行以下讨论之后: 如何增加Google App Engine请求计时器.默认值为60秒
和 https://groups.google.com/forum/#!topic/google-appengine/3TtfJG0I9nA
我意识到这是因为如果任何代码运行超过60秒,App引擎将停止.我首先尝试根据Do Exception捕获DeadlineExceededError异常执行以下操作?
from google.appengine.runtime import DeadlineExceededError
try:
answer = externalmod.Method()
except DeadlineExceededError:
answer = some_default
Run Code Online (Sandbox Code Playgroud)
但我得到的错误是没有模块google.appengine
然后意识到所有的文档都是针对标准环境的,但我使用的是灵活的环境,我认为这个appengine.runtime可能甚至不再存在当我这样做:
try:
answer = externalmod.Method()
except :
answer = some_default
Run Code Online (Sandbox Code Playgroud)
它工作,我开始捕捉一些DeadlineExceededErrors.但显然,我不能总是像这样捕获DeadlineExceededErrors.有时我会发现错误,有时候不会.我认为最好的方法是增加允许代码运行的时间,而不是仅仅捕获异常.
我尝试通过添加CPU来更改app.yaml文件:2但没有任何区别.
runtime_config:
python_version: 3
resources:
cpu: 2
memory_gb: 4
manual_scaling: …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的数据帧(数千x千),这里只显示5 x 3,时间是索引
col1 col2 col3
time
05/04/2018 05:14:52 AM +unend +unend 0
05/04/2018 05:14:57 AM 0 0 0
05/04/2018 05:15:02 AM 30.691 0.000 0.121
05/04/2018 05:15:07 AM 30.691 n. def. 0.108
05/04/2018 05:15:12 AM 30.715 0.000 0.105
Run Code Online (Sandbox Code Playgroud)
由于这些是来自其他设备(df是由它产生的pd.read_csv(filename)),因此数据帧而不是完全float类型现在最终会产生不需要的字符串,如+unend和n. def..这些都不是古典+infinity或NaN,这df.fillna()可能照顾了.我想替换字符串0.0.我看到了这些答案 Pandas替换了类型问题并 替换了pandas数据框中的字符串,虽然尝试做同样的事情,但是列或列是明智的,但不是元素.但是,在评论中,对于一般情况也有一些很好的提示.
如果我尝试做
mask = df.apply(lambda x: x.str.contains(r'+unend|n. def.'))
df[mask] =0.0
Run Code Online (Sandbox Code Playgroud)
我明白了 error: nothing to repeat
如果我做
mask = df.apply(lambda …Run Code Online (Sandbox Code Playgroud)