Асинхронность Python3
У меня появилась такая задача, есть 3 функции, 2 асинхронных, 1 синхронная, нужно сделать так, чтобы синхронная не блокировала выполнение команды, приведу простой пример:
import asyncio
# Синхронный код
def print_sync():
while 1:
print(2)
# Первая асинхронная функция
async def print_1():
while 1:
print(1)
await asyncio.sleep(0)
# Вторая асинхронная функция
async def print_2():
print_sync()
# Точка входа
if __name__ == '__main__':
ioloop = asyncio.get_event_loop()
tasks = [ioloop.create_task(print_1()), ioloop.create_task(print_2())]
wait_tasks = asyncio.wait(tasks)
ioloop.run_until_complete(wait_tasks)
ioloop.close()
Эта программа должна по очереди выводить на экран 1 и 2, код должен оставался асинхронным (я заменил реальные функции на эти, чтобы было понятнее, что происходит). При этом функцию print_sync() я не могу никак изменять, потому что вместо неё стоит другая, которая импортируется из библиотеки. Вопрос заключается в том, возможно ли как-то забрать контроль выполнения у синхронной функции и передать его другой, например, по прошествии 2 секунд. Т.е. сначала печатать на экран в течение 2 секунд '1', а в течение следующих 2 секунд '2'? Если это невозможно, то как можно добавить синхронный код в асинхронный, чтобы бесконечный цикл в синхронной функции не блокировал выполнение программы?