gpt4 book ai didi

python - 在打印 “Greeter client received: …”之前,gRPC Python quickstart/helloworld(greeter_client.py)已挂起

转载 作者:行者123 更新时间:2023-12-01 21:12:25 27 4
gpt4 key购买 nike

今天,我想开始为用Python编写的程序实现gRPC客户端和服务器。我已按照此处找到的教程进行操作:https://grpc.io/docs/languages/python/quickstart/
遵循我的意思是我完全遵循了指示,键入的每个命令都与编写的完全相同。首先安装所有要求(在conda环境中),然后运行greeter_server.py和greeter_client.py。从技术上讲,该程序可以运行,但是该客户端程序在我的系统上挂起大约30-40秒,然后以简单的问候“收到Greereter客户端:您好!”进行响应。
因此,我决定尝试在此处找到的快速入门教程的Go版本:https://grpc.io/docs/languages/go/quickstart/。再次严格按照所有指令进行操作,并构建并启动go服务器和go客户端,客户端程序在不到一秒钟的时间内响应“2020/08/27 12:48:24问候:Hello world”。
go版本的行为完全符合我的预期。然而,Python版本花费了将近一分钟的时间来回答一条简单的消息。有人知道发生了什么吗?
提前致谢。
编辑1)-我将通过一些测试来补充原始问题。对于原著中的不足,我深表歉意。因此,我一直在不同的机器上进行测试。在我的台式机(Ubuntu 20计算机)上,存在此问题。我可以简单地弹出一个终端,创建一个新的conda环境(我已经使用Python 3.8进行了这些测试)。我执行快速入门教程。 Python版本无法正常工作(要使我确信一切正常工作都花了太长时间)。我在Go中执行快速入门,一切运行正常。
我在2011年的Macbook Air上测试了该教程,启动了一个终端,创建了一个新的conda环境(3.8),并且与Go版本相比,gRPC Quick Start的Python版本运行良好(因为没有人为的区别)。
所以我想知道是否有任何gRPC专家会建议为什么发生这种情况。我已经重新启动计算机并再次进行了测试,但是问题仍然存在于我的Ubuntu Linux计算机上。
编辑2)-我只是在Ubuntu 20云VM上进行了类似的测试,并且一切都按预期工作(Python和Go版本之间没有区别)。我尝试了在网上找到的单独的随机“回声” gRPC Python教程(与gRPC快速入门教程无关),该问题在本地仍然存在。因此,我认为这个问题可以与我的环境隔离。我搞不清楚了。
编辑3)-我通过调试器运行了客户端代码并添加了断点。

from __future__ import print_function
import logging

import grpc

import helloworld_pb2
import helloworld_pb2_grpc


def run():
# NOTE(gRPC Python Team): .close() is possible on a channel and should be
# used in circumstances in which the with statement does not fit the needs
# of the code.
with grpc.insecure_channel('localhost:50051') as channel: # added break
stub = helloworld_pb2_grpc.GreeterStub(channel) # added break
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you')) # added break - HANGS ASSINING `response` OBJECT
print("Greeter client received: " + response.message) # added break


if __name__ == '__main__':
logging.basicConfig()
run()

它卡在with块内的print语句之前。在Mac上,我设置了相同的断点,调试器立即将响应对象分配给内存并进行打印。在我的Ubuntu计算机上,调试器挂起,尝试分配 response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))变量。我注意到使用Cython可能是一个线索。
如果我中断greeter_client.py进程,则会得到以下跟踪:
  File "greeter_client.py", line 37, in <module>
run()
File "greeter_client.py", line 31, in run
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
File "/home/james/.local/lib/python3.8/site-packages/grpc/_channel.py", line 824, in __call__
state, call, = self._blocking(request, timeout, metadata, credentials,
File "/home/james/.local/lib/python3.8/site-packages/grpc/_channel.py", line 813, in _blocking
event = call.next_event()
File "src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx.pxi", line 338, in grpc._cython.cygrpc.SegregatedCall.next_event
File "src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx.pxi", line 169, in grpc._cython.cygrpc._next_call_event
File "src/python/grpcio/grpc/_cython/_cygrpc/channel.pyx.pxi", line 163, in grpc._cython.cygrpc._next_call_event
File "src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi", line 63, in grpc._cython.cygrpc._latent_event
File "src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi", line 42, in grpc._cython.cygrpc._next
KeyboardInterrupt
编辑4)-其中一位评论者提出了一个很好的建议,可以测试python客户端和服务器组合(gRPC允许您以零的努力进行操作,即gRPC)。我执行了测试,但Python客户端的响应速度还是一样慢。 Go客户端-Go服务器组合仍然很快。我相信这会将其范围缩小到Python客户端上的问题。谢谢@DazWilkin。为了完整起见,Go客户端-Python服务器在不到1秒的时间内即可正常工作。
编辑5)-昨晚我完全重新安装了最低版本的Ubuntu 20.04。在新系统上,简单的greeter_client.py响应仍然需要大约45秒的延迟。 :(

最佳答案

对于所有包装语言(Python,Ruby,PHP,C#,Node),这可能是一个常见问题。直接原因是C-Ares名称解析器无法解析localhost的IPv6地址。可以通过指定环境变量GRPC_DNS_RESOLVER=native来避免该问题,该变量会更改默认名称解析器。
这是James提供的日志中的“挂起”部分:

D0831 13:09:27.577593604    6445 dns_resolver_ares.cc:184]   (c-ares resolver) resolver:0x55eaa9dbd8a0 AresDnsResolver::StartLocked() is called.
D0831 13:09:27.577596674 6445 grpc_ares_wrapper.cc:645] (c-ares resolver) request:0x55eaa9d99b80 c-ares grpc_dns_lookup_ares_locked_impl name=localhost:50051, default_port=https
D0831 13:09:27.577653493 6445 grpc_ares_ev_driver.cc:158] (c-ares resolver) request:0x55eaa9d99b80 grpc_ares_ev_driver_create_locked
D0831 13:09:27.577679913 6445 grpc_ares_wrapper.cc:200] (c-ares resolver) request:0x55eaa9d99b80 create_hostbyname_request_locked host:localhost port:33731 is_balancer:0 qtype:AAAA
D0831 13:09:27.577725082 6445 grpc_ares_wrapper.cc:200] (c-ares resolver) request:0x55eaa9d99b80 create_hostbyname_request_locked host:localhost port:33731 is_balancer:0 qtype:A
D0831 13:09:27.577736032 6445 grpc_ares_wrapper.cc:227] (c-ares resolver) request:0x55eaa9d99b80 on_hostbyname_done_locked qtype=A host=localhost ARES_SUCCESS
D0831 13:09:27.577740632 6445 grpc_ares_wrapper.cc:273] (c-ares resolver) request:0x55eaa9d99b80 c-ares resolver gets a AF_INET result:
addr: 127.0.0.1
port: 50051

D0831 13:09:27.577745522 6445 grpc_ares_ev_driver.cc:392] (c-ares resolver) request:0x55eaa9d99b80 new fd: c-ares fd: 10
D0831 13:09:27.577748092 6445 grpc_ares_ev_driver.cc:98] (c-ares resolver) request:0x55eaa9d99b80 Ref ev_driver 0x55eaa9cfd900
D0831 13:09:27.577750552 6445 grpc_ares_ev_driver.cc:406] (c-ares resolver) request:0x55eaa9d99b80 notify read on: c-ares fd: 10
D0831 13:09:27.577753342 6445 grpc_ares_ev_driver.cc:463] (c-ares resolver) request:0x55eaa9d99b80 ev_driver=0x55eaa9cfd900 grpc_ares_ev_driver_start_locked. timeout in 120000 ms
D0831 13:09:27.577755682 6445 grpc_ares_ev_driver.cc:98] (c-ares resolver) request:0x55eaa9d99b80 Ref ev_driver 0x55eaa9cfd900
D0831 13:09:27.577763612 6445 grpc_ares_ev_driver.cc:227] (c-ares resolver) request:0x55eaa9d99b80 ev_driver=0x55eaa9cfd900. next ares process poll time in 1000 ms
D0831 13:09:27.577765852 6445 grpc_ares_ev_driver.cc:98] (c-ares resolver) request:0x55eaa9d99b80 Ref ev_driver 0x55eaa9cfd900
D0831 13:09:27.577773282 6445 dns_resolver_ares.cc:448] (c-ares resolver) resolver:0x55eaa9dbd8a0 Started resolving. pending_request_:0x55eaa9d99b80
此错误的跟踪问题位于 grpc#24018中。对于仍然被此问题阻止的任何人,请随时在该线程上发表评论,以便它可以引起更多关注。

关于python - 在打印 “Greeter client received: …”之前,gRPC Python quickstart/helloworld(greeter_client.py)已挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63621097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com