Mam problemy ze zrozumieniem użycia asynchronicznego zrozumienia wprowadzonego w Pythonie 3.6. Jako zrzeczenie się, nie mam dużego doświadczenia w zajmowaniu się ogólnie kodem asynchronicznym w Pythonie.Python Asynchronous Comprehensions - jak działają?
Przykład podany w dokumencie what's new for Python 3.6 jest:
result = [i async for i in aiter() if i % 2]
W PEP, to jest rozszerzona do:
result = []
async for i in aiter():
if i % 2:
result.append(i)
myślę Rozumiem, że funkcja aiter()
jest wywoływana asynchronicznie, aby każda iteracja z aiter
mogła przebiegać bez poprzedniej koniecznie powracającej jeszcze (lub czy to zrozumienie jest złe?).
To, czego nie jestem pewien, to sposób, w jaki przekłada się tutaj na zrozumienie listy. Czy wyniki zostaną umieszczone na liście w kolejności, w jakiej są zwracane? Czy istnieją skuteczne "placeholder" na liście końcowej, aby każdy wynik został umieszczony na liście we właściwej kolejności? Czy też myślę o tym w niewłaściwy sposób?
Dodatkowo, czy ktoś jest w stanie dostarczyć rzeczywistego przykładu, który zilustrowałby zarówno odpowiedni przypadek użycia, jak i podstawową mechanikę async
w takich rozumowaniach?
Ciekawi mnie również generator asynchroniczny. To samo zachowanie lub inne? –