Я пытаюсь преобразовать синхронную библиотеку для использования внутренней асинхронной структуры ввода-вывода. У меня есть несколько методов, которые выглядят так:
def foo:
....
sync_call_1() # synchronous blocking call
....
sync_call_2() # synchronous blocking call
....
return bar
Для каждой из синхронных функций (sync_call_*
) я написал соответствующую асинхронную функцию, которая выполняет обратный вызов. Например.
def async_call_1(callback=none):
# do the I/O
callback()
Теперь для вопроса о новичке python - что проще всего перевести существующие методы для использования этих новых методов async? То есть метод foo()
выше должен быть теперь:
def async_foo(callback):
# Do the foo() stuff using async_call_*
callback()
Один очевидный выбор - передать обратный вызов в каждый асинхронный метод, который эффективно "возобновляет" вызывающую функцию "foo", а затем вызывает глобальный вызов в самом конце метода. Однако это делает код хрупким, уродливым, и мне нужно будет добавить новый обратный вызов для каждого вызова метода async_call_*
.
Есть ли простой способ сделать это с использованием идиомы python, например, генератора или сопрограммы?