Почему в Python (3.6)
chunk = await evt_loop.run_in_executor(io_exec, arc.read, chunk_size)
работает точно так, как ожидалось, но
read_ftr = evt_loop.run_in_executor(io_exec, arc.read, chunk_size)
chunk = await read_ftr
выдает AssertionError ("yield from не использовался с будущим",) навторая строка, и как мне заставить его работать?
Ниже приведен фрагмент кода, который я пытаюсь запустить.Слияние трех строк read_ftr вместе, чтобы получить первую однострочную реализацию, работает, а то, как это показано ниже, приводит к ошибке подтверждения в "chunk = await read_ftr".
read_ftr: aio.Future = None
hash_ftr: aio.Future = None
chunk = None
with open(arc_path, "rb") as arc:
while arc_offs < arc_size:
chunk_size = min(arc_size - arc_offs, max_chunk_size)
if read_ftr:
chunk = await read_ftr
read_ftr = evt_loop.run_in_executor(io_exec, arc.read, chunk_size)
arc_offs += chunk_size
if not chunk:
continue
if hash_ftr:
await hash_ftr
hash_ftr = hasher.async_update(chunk)
if hash_ftr:
await hash_ftr
await hasher.async_digest()