Wie warte ich auf eine Coroutine in einer nicht asynchronisierten Funktion in Python?Python

Python-Programme
Anonymous
 Wie warte ich auf eine Coroutine in einer nicht asynchronisierten Funktion in Python?

Post by Anonymous »

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 ().

Code: Select all

asgiref.async_to_sync
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post