データを受け入れるように設計されたこのコルーチンがあり、チェーン内の次のコルーチンにデータを送信しますが、長さのブロックです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("")
どうすればこれを改善できますか? または、これを達成するためのより簡単な方法はありますか?