Асинхронность 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'? Если это невозможно, то как можно добавить синхронный код в асинхронный, чтобы бесконечный цикл в синхронной функции не блокировал выполнение программы?


Ответы (0 шт):