Ich meine, was bekomme ich durch die Verwendung von Async für? Hier ist der Code, den ich mit Async für schreibe, AIter(10) könnte durch get_range() ersetzt werden.
Aber Der Code läuft synchron und nicht asynchron.
import asyncio
async def get_range():
for i in range(10):
print(f"start {i}")
await asyncio.sleep(1)
print(f"end {i}")
yield i
class AIter:
def __init__(self, N):
self.i = 0
self.N = N
def __aiter__(self):
return self
async def __anext__(self):
i = self.i
print(f"start {i}")
await asyncio.sleep(1)
print(f"end {i}")
if i >= self.N:
raise StopAsyncIteration
self.i += 1
return i
async def main():
async for p in AIter(10):
print(f"finally {p}")
if __name__ == "__main__":
asyncio.run(main())
Das Ergebnis, das ich angenommen habe, sollte sein:
start 1
start 2
start 3
...
end 1
end 2
...
finally 1
finally 2
...
Das tatsächliche Ergebnis ist jedoch:
start 0
end 0
finally 0
start 1
end 1
finally 1
start 2
end 2
Ich weiß, dass ich das ausgenommene Ergebnis erhalten könnte, indem ich asyncio.gather oder asyncio.wait verwende.
Aber es ist für mich schwer zu verstehen, was ich durch die Verwendung von async for hier anstelle von simple for erreicht habe.
Was ist der richtige Weg, um Async für zu verwenden, wenn ich mehrere Feature-Objekte durchlaufen und sie verwenden möchte, sobald eines fertig ist? Zum Beispiel:
async for f in feature_objects:
data = await f
with open("file", "w") as fi:
fi.write()
Wie verwende ich „async for“ in Python? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post