Betrachten Sie dieses erfundene Beispiel: < /p>
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())
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>
>>
Code: Select all
result = func(*args, **kwargs)
if inspect.isawaitable(result):
return sync_await(result)
Aber wie kann ich diesen Sync_await so implementieren, dass der aktuelle asynchrische Kontext mit aktuellen Kontext -VARs verwendet wird?