【发布时间】:2018-10-26 15:16:17
【问题描述】:
我正在创建一个连接到服务器的存根,该服务器以特定间隔流式传输数据,然后将其上传到 TSDB。我已经实施了批处理来优化上传,但是如果在一个时间间隔内流出的数据量与批量大小不一致,那么一些数据将在下一个时间间隔之前不会被上传,这是我不想要的。 gRPC 存根上是否有办法检查流是否为空?
class DialInClient(object):
def __init__(self, host, port, timeout=100000000, user='root', password='lablab'):
self._host = host
self._port = port
self._timeout = float(timeout)
self._channel = None
self._cisco_ems_stub = None
self._connected = False
self._metadata = [('username', user), ('password', password)]
def subscribe(self, sub_id):
sub_args = CreateSubsArgs(ReqId=1, encode=3, subidstr=sub_id)
stream = self._cisco_ems_stub.CreateSubs(sub_args, timeout=self._timeout, metadata=self._metadata)
for segment in stream:
yield segment
def connect(self):
self._channel = grpc.insecure_channel(':'.join([self._host,self._port]))
try:
grpc.channel_ready_future(self._channel).result(timeout=10)
self._connected = True
except grpc.FutureTimeoutError as e:
raise DeviceFailedToConnect from e
else:
self._cisco_ems_stub = gRPCConfigOperStub(self._channel)
如果我设置了一个低超时,整个通道断开连接,我想在 for 循环中添加某种超时以进行流式传输,看看我是否在 1 秒内没有得到另一个片段 yield None 告诉我的另一个这就是结束的部分,并且在没有完整批量大小的情况下上传。
【问题讨论】:
标签: python python-3.x protocol-buffers grpc