我有这个协程,它旨在接受数据,然后将数据发送到链中的下一个协程,但以长度为块的形式发送blocksize
。由于字符串是不可变的,我认为我正在做的字符串附加效率很低,因为每次附加都会创建一个新的字符串对象。
由于这只是这些链中一些适当工作之间的“胶水”,因此能够使其尽可能光滑会很好。
def chunker(target, blocksize=DEFAULT_BLOCK_SIZE):
buffer = ""
target_send = target.send
while True:
try:
input_data = yield
buffer += input_data # creates new string object every time
buffer_len = len(buffer)
if buffer_len >= blocksize:
chunks, leftover = divmod(buffer_len, blocksize)
for i in xrange(0, chunks*blocksize, blocksize):
target_send(buffer[i:i+blocksize])
buffer = buffer[-leftover:] if leftover else ""
except CleanUp:
if buffer:
target_send(buffer)
target_send("")
我该如何改进呢?或者更好的是,有没有更简单的方法来实现这一点?