我正在使用服务器打开一个GRPC双向流(具体而言,python3.8)。在从服务器获得一些数据之后,我必须完成一个耗时的任务(大约需要3分钟)。在执行此操作时,我将保持通道打开,以便在任务完成后立即将结果发送到服务器。
在服务器最后一条消息发出1分钟后,我的连接就关闭了。我得到了这个错误
<AioRpcError of RPC that terminated with:
status = StatusCode.INTERNAL
details = "Received RST_STREAM with error code 1"
debug_error_string = "{"created":"@1625250019.779494905","description":"Error received from peer ipv4:3.101.44.139:443","file":"src/core/lib/surface/call.cc","file_line":1066,"grpc_message":"Received RST_STREAM with error code 1","grpc_status":13}"
>对我来说好像是超时了。我是grpc的初学者。我引用了这篇文章,并给我的频道提供了本文中指定的客户端选项,每个数目都接近5分钟。但这并没有改变什么。有人能帮我了解一下这里发生了什么,我该怎么解决这个问题吗?
TL;博士
我与服务器的连接是一个异步安全通道。请注意,我的两个流是独立的,这就是为什么我必须做async
channel=grpc.aio.secure_channel(address, credentials=creds, options=options)我有两条协同线,一条是等待长时间运行的任务被清除,另一条是双向流上的接收和感知消息。
def parse_response(resp):
# collect data from server response
# make `task_available=True` when all data is received
async def stream_handler():
stub = TaskServiceStub(channel)
req_gen = get_requests() # An async generator for request messages
stream: grpc.aio.StreamStreamCall = stub.Task(req_gen)
async for resp in stream.__aiter__():
parse_response(resp)
async def task_handler():
if task_available:
do_task()
async def main():
await asyncio.gather(stream_handler(), task_handler())https://stackoverflow.com/questions/68230023
复制相似问题