我使用的API返回以\x04(传输结束(字节终止的消息。我想用一种很好的方式捕捉这个字节。这是我写的代码:
# Only works if buffer size is 1 byte
read = lambda: self._sslsocket.recv(1)
response = b''
for data_buffer in iter(read, b'x04'):
response += data_buffer
我想让这个解决方案与arbitrary缓冲区大小一起工作。有没有一种方法可以在不影响性能的情况下做到这一点,或者我应该在recv(1024(为True时使用generator/classic?
您可以通过以下两种方式之一对其进行编码:
def read(bufsize):
return lambda: self._sslsocket.recv(bufsize)
或者更简洁地说:
read = lambda bufsize: lambda: self._sslsocket.recv(bufsize)
示例用法:
response = b''
for data_buffer in iter(read(1), b'x04'):
response += data_buffer
基本上,这些将本地read()
函数变成一个非常专业的装饰器(返回函数的函数(。