Próbuję przekonwertować bibliotekę synchroniczną, aby użyć wewnętrznej asynchronicznej struktury IO. I kilka sposobów, które wyglądają następująco:Asynchroniczne wywołania zwrotne i generatory języka Python
def foo:
....
sync_call_1() # synchronous blocking call
....
sync_call_2() # synchronous blocking call
....
return bar
Dla każdej synchronicznych funkcji (sync_call_*
) NapisaĹ,em odpowiedniej funkcji asynchronicznej, która przyjmuje wywołania zwrotnego. Na przykład.
def async_call_1(callback=none):
# do the I/O
callback()
Teraz na pytanie pyton początkującego - Co najprostszy sposób na przełożenie istniejących metod zamiast używać tych nowych metod async? Oznacza to, że metoda foo()
powyżej musi być teraz:
def async_foo(callback):
# Do the foo() stuff using async_call_*
callback()
Oczywistym wyborem jest przeniesienie wywołania zwrotnego do każdej metody asynchronicznego, które skutecznie „powraca” do wywoływania funkcji „foo”, a następnie wywołać zwrotnego globalny w koniec metody. Jednak powoduje to, że kod jest kruchy, brzydki i musiałbym dodać nowe wywołanie zwrotne dla każdego połączenia z metodą async_call_*
.
Czy istnieje prosty sposób, aby to zrobić za pomocą idiom Pythona, takich jak generator lub coroutine?