Rozważmy współprogram który wzywa do innego współprogram:W jaki sposób wywołujemy normalną funkcję, gdy spodziewany jest coroutine?
async def foo(bar):
result = await bar()
return result
Działa to dobrze jeśli bar
jest współprogram. Co muszę zrobić (tj. Co jest potrzebne, aby zawinąć połączenie pod numer bar
), aby ten kod działał prawidłowo, jeśli bar
jest normalną funkcją?
Jest całkowicie możliwe zdefiniowanie coroutine z async def
, nawet jeśli nigdy nie robi nic asynchronicznego (tj. Nigdy nie używa await
). Jednak pytanie dotyczy sposobu zawijania/modyfikowania/wywoływania zwykłej funkcji bar
wewnątrz kodu dla foo
, tak aby można było oczekiwać bar
.
Wygląda na to, że działa. Zauważ, co ciekawe, że 'asyncio.coroutine (normal_function)()' jest generatorem, podczas gdy 'a_coroutine_function()' jest coroutine. – DanielSank
Czy istnieje sposób traktowania obiektu generatora, który zwraca jak obiekt zadania, wywoływania 'Task.done()' i sprawdzania, czy nadal działa? – Dagrooms