似乎有一个问题 google-cloud-pubsub == 0.39.1 google-api-python-client == 1.7.8
当凭据失效时,在循环中进行拉入会导致大量python3 1456 root 71u IPv4 46501 0t0 TCP XXX-XXXXX-XXXX:47074->YYYYYYYY-YY-YYYYY.1e100.net:https (CLOSE_WAIT)
个文件保持打开状态,并最终导致“打开文件过多”的问题。
问题似乎不是在pubsub本身,而是在gRPC中。
5月8日22:34:41 .sh [17736]:回溯(最近一次通话结束): 5月8日22:34:41 .sh [17736]:文件“ /opt////lib/python3.6/site-packages/google/api_core/grpc_helpers.py”,第57行,在error_remapped_callable中 5月8日22:34:41 .sh [17736]:返回callable _(* args,** kwargs) 5月8日22:34:41 .sh [17736]:调用中的文件“ /opt///lib/python3.6/site-packages/grpc/_channel.py”,第562行 5月8日22:34:41 .sh [17736]:返回_end_unary_response_blocking(状态,调用,错误,无) 5月8日22:34:41 .sh [17736]:文件_end_unary_response_blocking中的文件“ /opt////lib/python3.6/site-packages/grpc/_channel.py”,第466行 5月8日22:34:41 .sh [17736]:提高_Rendezvous(状态,无,无,截止日期) 5月8日22:34:41 .sh [17736]:grpc._channel._Rendezvous:<_的RPC的终止于: 5月8日22:34:41 .sh [17736]:#011status = StatusCode.UNAVAILABLE 5月8日22:34:41 .sh [17736]:#011details =“从插件获取元数据失败,并显示以下错误:('invalid_grant:无效的JWT签名。','{\ n” error“:” invalid_grant“,\ n” error_description“:“无效的JWT签名。” \ n}')“ 5月8日22:34:41 .sh [17736]:#011debug_error_string =“ {” created“:” @@ 1557354881.258250528“,” description“:”从插件获取元数据失败,并显示以下错误:('invalid_grant:无效的JWT签名。', '{\ n“ error”:“ invalid_grant”,\ n“ error_description”:“无效的JWT签名。” \ n}')“,” file“:” src / core / lib / security / credentials / plugin / plugin_credentials。 cc“,” file_line“:79,” grpc_status“:14}” 5月8日22:34:41 .sh [17736]:> 5月8日22:34:41 .sh [17736]:上面的异常是以下异常的直接原因: 5月8日22:34:41 .sh [17736]:回溯(最近一次通话过去): 5月8日22:34:41 .sh [17736]:在subscribeToStuff中的文件“ /opt////lib/python3.6/site-packages/lt/cloud/cloudpull.py”,第113行 5月8日22:34:41 .sh [17736]:pull_response = Subscriber.pull(订阅路径,max_messages = NUM_MESSAGES,超时= 60,重试=无) 5月8日22:34:41 .sh [17736]:在第45行中输入文件“ /opt///lib/python3.6/site-packages/google/cloud/pubsub_v1/_gapic.py” 5月8日22:34:41 .sh [17736]:fx = lambda self,* a,** kw:wrapped_fx(self.api,* a,** kw)#noqa 5月8日22:34:41 .sh [17736]:文件“ /opt////lib/python3.6/site-packages/google/cloud/pubsub_v1/gapic/subscriber_client.py”,行860,在下拉列表中 5月8日22:34:41 .sh [17736]:请求,重试=重试,超时=超时,元数据=元数据 5月8日22:34:41 .sh [17736]:在通话<中,文件“ /opt////lib/python3.6/site-packages/google/api_core/gapic_v1/method.py”,第143行/ strong> 5月8日22:34:41 .sh [17736]:返回wrapd_func(* args,** kwargs) 5月8日22:34:41 .sh [17736]:在func_with_timeout中,文件“ /opt////lib/python3.6/site-packages/google/api_core/timeout.py”,第102行 5月8日22:34:41 .sh [17736]:返回函数(* args,** kwargs) 5月8日22:34:41 .sh [17736]:文件“ /opt////lib/python3.6/site-packages/google/api_core/grpc_helpers.py”,第59行,在error_remapped_callable中 5月8日22:34:41 .sh [17736]:six.raise_from(exceptions.from_grpc_error(exc),exc) 5月8日22:34:41 .sh [17736]:文件“”,第3行,位于raise_from 5月8日22:34:41 .sh [17736]:google.api_core.exceptions.ServiceUnavailable:503从插件获取元数据失败,并显示错误:(“'invalid_grant:无效的JWT签名。','{\ n“ error”:“ invalid_grant “,\ n” error_description“:”无效的JWT签名。“ \ n}')
答案 0 :(得分:1)
https://github.com/googleapis/google-cloud-python/issues/5523
底部client.api.transport._channel.close()
pubsub_v1.SubscriberClient
属于客户类别。
所以你可以做...
subscriber = pubsub_v1.SubscriberClient(credentials=credentials)
try:
subscription_path = subscriber.subscription_path(project, subscription)
pull_response = subscriber.pull(subscription_path, max_messages=NUM_MESSAGES, timeout=60, retry=None)
for msg in pull_response.received_messages:
#do stuff
finally:
subscriber.api.transport._channel.close()
您可以循环执行此操作,以防止您的进程打开太多文件:)