← Назад к вопросам

Использовали ли метод run()

1.6 Junior🔥 111 комментариев
#Python Core#Асинхронность и многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод run() в Python

Контекст использования

Метод run() чаще всего используется в контексте многопоточного программирования с модулем threading. Это основной метод класса Thread, который содержит код, выполняемый в отдельном потоке.

Как работает run() в потоках

При создании потока вы переопределяете метод run() или передаёте функцию в параметр target:

import threading
import time

class MyThread(threading.Thread):
    def run(self):
        for i in range(5):
            print(f'Поток выполняет итерацию {i}')
            time.sleep(1)

thread = MyThread()
thread.start()  # Вызывает run() в отдельном потоке
thread.join()   # Ждём завершения потока

Важные отличия: start() vs run()

Никогда не вызывайте run() напрямую — это критическая ошибка:

# НЕПРАВИЛЬНО — run() выполнится в главном потоке
thread = MyThread()
thread.run()  # Блокирует главный поток!

# ПРАВИЛЬНО — run() выполнится в отдельном потоке
thread = MyThread()
thread.start()  # Запускает новый поток

Альтернативный способ с target

Вместо переопределения класса можно передать функцию:

def worker(name, duration):
    print(f'Работник {name} начал')
    time.sleep(duration)
    print(f'Работник {name} закончил')

thread = threading.Thread(target=worker, args=('A', 2))
thread.start()
thread.join()

Использование run() в asyncio

В асинхронном программировании есть метод run() в модуле asyncio:

import asyncio

async def main():
    await asyncio.sleep(1)
    print('Асинхронная операция')

asyncio.run(main())

Лучшие практики

  • Используйте start(), а не run() для запуска потоков
  • Переопределяйте run() для логики, выполняемой в отдельном потоке
  • Обрабатывайте исключения внутри run(), так как стек трассировки не пропагируется
  • Избегайте общего состояния между потоками без синхронизации

Метод run() — фундаментальный инструмент многопоточного программирования на Python.

Использовали ли метод run() | PrepBro