Tôi có một mã chặn, không async như thế này:lặp Lazy (máy phát điện) với asyncio
def f():
def inner():
while True:
yield read()
return inner()
Với mã này người gọi có thể chọn khi nào phải ngừng chức năng để tạo ra dữ liệu. Làm thế nào để thay đổi điều này thành không đồng bộ? Giải pháp này không hoạt động:
async def f():
async def inner():
while True:
yield await coroutine_read()
return inner()
... vì không thể sử dụng trong các chức năng async def
. Nếu tôi xóa số async
khỏi chữ ký inner()
, tôi không thể sử dụng await
nữa.
Bạn không cần 'yield read()' khi sử dụng asyncio, vì 'await' sẽ thực hiện chính xác điều này đằng sau hậu trường. Điều này không trả lời câu hỏi của khóa học. –
PEP-0492 [không bao gồm] (https://www.python.org/dev/peps/pep-0492/#coroutine-generators) coroutine-máy phát điện (đó là những gì bạn muốn), vì vậy, kể từ khi PEP chỉ được thực hiện trong 3.5, tôi đoán câu trả lời là "không có cách nào để làm điều này". –
Cố gắng triển khai cách tạo ra bên trong các hàm không đồng bộ: http://stackoverflow.com/a/37572657/1113207 –