尝试调用存根方法时出现以下错误。知道是什么原因造成的吗?
[bolt.api.handlers] 2019-08-21 20:07:57,792 ERROR handlers:1066: 'ResourceHandler' object has no attribute 'ontology_service_handler'
Traceback (most recent call last):
File "/bolt-webserver/bolt/api/onse/onse_handlers/ontology_service.py", line 17, in post
ontology_id = await self.onse_stub.createOntology()
File "/bolt-webserver/bolt/api/onse/onse_stub.py", line 41, in createOntology
return self.stub.CreateOntology(ontology_messages_pb2.Ontology())
File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 565, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 467, in _end_unary_response_blocking
raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "failed to connect to all addresses"
debug_error_string = "{"created":"@1566418077.791002345","description":"Failed to pick …Run Code Online (Sandbox Code Playgroud) 我试图了解 gRPC 队列的管理方式以及 gRPC 队列大小是否有任何大小限制。
根据此,帖子请求已排队:
如果您的服务器已经同时处理了maximum_concurrent_rpcs个请求,并且又收到另一个请求,则该请求将立即被拒绝。
如果ThreadPoolExecutor的max_workers小于maximum_concurrent_rpcs,那么在所有线程都忙于处理请求后,下一个请求将排队,并在线程完成处理时处理。
根据此 GitHub 帖子,队列由 gRPC 服务器管理:
因此,maximum_concurrent_rpcs 为您提供了一种方法来设置服务器队列中等待线程服务的 RPC 数量的上限。
但微软的这篇文章让我很困惑,它说请求在客户端排队:
当活动呼叫数量达到连接流限制时,其他呼叫将在客户端中排队。排队的呼叫等待活动呼叫完成后再发送。
但请注意,微软在这里谈论的是连接流限制。当达到该限制时,客户端上会形成一个队列。
有两种类型的队列吗?一个是在满足某些限制时在服务器(gRPC 队列)上创建的(如上所述),另一个是在达到此连接流限制时在客户端上创建的。
gRPC 队列的大小限制是多少?我的意思是,它仅受底层硬件(RAM)的限制?
我们是否有可能因为队列大小过大而导致服务器失败?是否可以限制此队列大小?
如果我们谈论的是 2 个不同的队列,我们是否也可以管理和限制客户端上的队列?
我对python的观点特别感兴趣。
谢谢!
PS 我假设当人们谈论 gRPC 队列时,他们谈论的是在服务器上创建的队列。
我希望运行我的应用程序没有任何问题,但我收到了此附加错误。有人可以帮助我或指出我正确的方向来解释为什么会发生这种情况吗?
Traceback (most recent call last):
File "/Users/andre.sitorus/Documents/GitHub/nexus/automation-api/app/main.py", line 4, in <module>
from configurations import config # noqa # pylint: disable=unused-import
File "/Users/andre.sitorus/Documents/GitHub/nexus/automation-api/app/configurations/config.py", line 7, in <module>
from google.cloud import secretmanager
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager.py", line 20, in <module>
from google.cloud.secretmanager_v1 import SecretManagerServiceClient
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager_v1/__init__.py", line 24, in <module>
from google.cloud.secretmanager_v1.gapic import secret_manager_service_client
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager_v1/gapic/secret_manager_service_client.py", line 25, in <module>
import google.api_core.gapic_v1.client_info
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/api_core/gapic_v1/__init__.py", line 18, in <module>
from google.api_core.gapic_v1 import config
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/api_core/gapic_v1/config.py", line 23, in <module>
import grpc
File "/Users/andre.sitorus/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/__init__.py", line …Run Code Online (Sandbox Code Playgroud) 我正在将云存储与 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
要编译 Python 的 proto 文件,我可以
protoc -I=.--python_out=$DST_DIR sommem.proto
Run Code Online (Sandbox Code Playgroud)
基于https://developers.google.com/protocol-buffers/docs/pythontutorial
或者
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. some.proto
Run Code Online (Sandbox Code Playgroud)
基于https://grpc.io/docs/languages/python/basics/#generate-client-and-server-code
protoc我想知道和之间有什么区别python -m grpc_tools.protoc,更推荐使用哪一个来生成 python*_pb2.py[i]文件?
顺便说一句,它看起来protoc不支持--grpc_python_out。
我试图捕获在任何服务程序中引发的任何异常,以便我可以确保我只传播已知的异常而不是像 ValueError、TypeError 等意外的异常。
我希望能够捕获任何引发的错误,并对它们进行格式化或将它们转换为其他错误,以更好地控制公开的信息。
我不想用 try/except 包含每个服务程序方法。
我试过使用拦截器,但我无法捕捉到那里的错误。
有没有办法为 grpc 服务器指定错误处理程序?就像你对 Flask 或任何其他 http 服务器所做的一样?
最近,我一直在使用 MagicMock() 在 python 中模拟 gRPC 调用,但我没有成功模拟我得到的 gRPC 响应消息。这是一段Python客户端代码
def senor_read(self, server_end_point)
with grpc.insecure_channel(server_end_point) as grpc_channel:
grpc_stub = sensorservice_pb2_grpc.getsensorinfostub(grpc_channel)
sensor_response = yield grpc_stub.getsensorreading(sensorservice_pb2_grpc.request(
sensorname=name, account=account))
if sensor_response.ok:
print(" Successful sensor reading")
elf sensor_resonse.error:
raise Sensor_ErrorReading(why="Not able to read sensor)
return convert_resoonse_to_dict(sensor_response)
Run Code Online (Sandbox Code Playgroud)
这是我模拟它的方式(还是新手学习模拟框架)
sensorservice_pb2_grpc = MagicMock()
sensorservice_pb2_grpc.getsensorinfostub = MagicMock()
mock_grpc_stub = MagicMock()
mock_grpc_channel = MagicMock()
mock_grpc_channel.grpc.insecure_channel = MagicMock()
mock_grpc_channel.grpc_channel = MagicMock()
mock_grpc_response = MagicMock(mock_grpc_stub.getsensorreading)
type(mock_grpc_response.return_value).error = PropertyMock(return_value=True)
Run Code Online (Sandbox Code Playgroud)
流程是 python 函数 senor_read() 向远程服务器发出 gRPC 请求并获取读数并传回调用者。
此测试的目的是使代码在“eif”情况下执行并捕获异常。1)当我执行测试代码时,如果情况发生并且我看到其他异常被发送给调用者,它不会进入“elf”。我是否在 gRPC 响应模拟中正确设置了状态?
2)我的模拟步骤对于模拟 gRPC 调用是否正确?
3)此外,当我运行时,我无法看到成功时的打印消息,而只能看到失败测试用例的打印消息。另外,实际功能中的打印不打印? …
我有一个示例 helloworld.proto 文件并使用 Python。我不明白这个选项关键字在编译阶段有什么作用?
syntax = "proto3";
package services.helloworld;
option go_package = "github.com/xyz/api/go/services/helloworld";
Run Code Online (Sandbox Code Playgroud) 我正在尝试发送 grpc 请求,预计会收到返回的消息流。相反,我收到的响应为 <_MultiThreadedRendezvous object>。任何人都可以帮助我理解为什么我收到这个以及我应该做什么来从这个对象中提取预期的消息。在本例中,服务器是 C++,客户端是 python。
grpc-python ×10
grpc ×6
python ×5
python-3.x ×2
apple-m1 ×1
conda ×1
interceptor ×1
mocking ×1
python-mock ×1
unit-testing ×1