← Назад к вопросам
Использовали ли метод 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.