Wie warte ich auf eine Coroutine in einer nicht asynchronisierten Funktion in Python?
Posted: 10 Jun 2025, 15:03
Betrachten Sie dieses erfundene Beispiel: < /p>
Da das Schlüsselwort in einer nicht asynchronisierenden Funktion nicht verwendet werden kann, wie erwarte ich auf ein wartbares aus einer Nicht-Async-Funktion? asyncio.run und asyncio.get_running_loop (). funktioniert auch nicht: runtimeError: Sie können AsynctoSync im selben Thread nicht wie eine asynchriese Ereignisschleife verwenden - warten Sie einfach auf die asynchronische Funktion. Tut dies nicht, nachfolgende Dekorateure gehen fälschlicherweise davon aus, dass sie eine Synchronisierungsfunktion einwickeln. Ein Synchronisierungsdekorator kann sich dagegen bewachen, indem er das Ergebnis überprüfen (vorausgesetzt, er muss vor der Rückgabe mit dem Ergebnis arbeiten): < /p>
>>
Aber wie kann ich diesen Sync_await so implementieren, dass der aktuelle asynchrische Kontext mit aktuellen Kontext -VARs verwendet wird?
Code: Select all
import asyncio
async def main():
print(non_async_function())
def non_async_function():
# Syntax error due to "await".
return await async_function()
async def async_function():
return "foo"
if __name__ == '__main__':
asyncio.run(main())
Code: Select all
asgiref.async_to_sync
>>
Code: Select all
result = func(*args, **kwargs)
if inspect.isawaitable(result):
return sync_await(result)