Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: asyncio, synchronous, integration

Как в асинхронном коде вызвать синхронную функцию?

Вопрос проверяет знание методов интеграции синхронного кода с асинхронным и понимание потенциальных проблем.

Короткий ответ

Для вызова синхронной функции в асинхронном коде используйте asyncio.to_thread() для CPU-bound задач или loop.run_in_executor() для выполнения в отдельном потоке. Для I/O-bound операций лучше переписать функцию в асинхронную версию.

Длинный ответ

Интеграция синхронного кода в асинхронное приложение требует осторожности, чтобы не блокировать event loop.

Методы вызова синхронных функций:

1. asyncio.to_thread() (Python 3.9+):

import asyncio
import time

def sync_cpu_function():
    time.sleep(2)  # Имитация CPU-bound операции
    return "результат"

async def main():
    # Запуск в отдельном потоке
    result = await asyncio.to_thread(sync_cpu_function)
    print(f"Результат: {result}")

asyncio.run(main())

2. loop.run_in_executor():

import asyncio
import concurrent.futures

def sync_io_function():
    # Имитация I/O операции
    with open("file.txt", "r") as f:
        return f.read()

async def main():
    loop = asyncio.get_running_loop()
    # Запуск в ThreadPoolExecutor
    result = await loop.run_in_executor(
        None, sync_io_function  # None = default executor
    )
    print(f"Результат: {result}")

asyncio.run(main())

Ограничения и рекомендации:

  • CPU-bound задачи: используйте отдельные процессы

  • I/O-bound задачи: используйте отдельные потоки

  • Блокирующие вызовы: избегайте в основном потоке

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Python

    Python

Ключевые слова

#asyncio

#synchronous

#integration

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.