W Pythonie 3.6, jestem w stanie użyć yield
wewnątrz coroutine. Jednak nie mogę używać yield from
.Dlaczego nie mogę "zrezygnować z" wewnątrz funkcji asynchronicznej?
Poniżej znajduje się mój kod. Na linii 3 czekam na kolejnego coroutine'a. W linii 4 próbuję pobrać plik yield from
. Dlaczego Python 3.6 nie pozwala mi tego zrobić?
async def read_file(self, filename):
with tempfile.NamedTemporaryFile(mode='r', delete=True, dir='/tmp', prefix='sftp') as tmp_file:
await self.copy_file(filename, tmp_file)
yield from open(tmp_file)
Oto pythonowy wyjątek 3,6 podnosi dla powyższego kodu:
File "example.py", line 4
yield from open(tmp_file)
^
SyntaxError: 'yield from' inside async function
Czy to prawda, że dekorator @ asyncio.coroutine może być użyty do włączenia "zysku z" w funkcji asynchronicznej? Z dokumentacji asyncio: "@ asyncio.coroutine¶ Dekorator do oznaczania coroutines na podstawie generatora, który umożliwia generatorowi wykorzystanie wydajności do wywoływania asynchronicznych defoutrów, a także umożliwia generowanie wywołania przez asynchroniczne defuty, na przykład za pomocą czekania wyrażenie." Nie jestem pewien, czy to działałoby z kodem, który napisałeś powyżej ... – Jasha
Zobacz także https://stackoverflow.com/questions/39637675/what-is-the-difference-between-types-coroutine-and-asyncio -kontynent dekorator – Jasha