我有一个共同例程,它被设计为接受数据,然后将数据发送到链中的下一个共同例程,但以长度为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("")
我该如何改进?或者更好,有没有更简单的方法来实现这一点?你知道吗
一种方法是维护每个块的列表,然后在到达
blocksize
时''.join()
它们,这应该比字符串串联更有效。例如(未测试):相关问题 更多 >
编程相关推荐