Робота з потоками
Свайпніть щоб показати меню
Модуль threading у Python надає простий, але потужний спосіб створення та керування потоками, що дозволяє виконувати кілька операцій одночасно в межах одного процесу. Потоки — це легковагові одиниці виконання, які спільно використовують одну й ту ж область пам'яті, що робить їх придатними для завдань, таких як операції введення/виведення, очікування зовнішніх ресурсів або оновлення інтерфейсів користувача.
Життєвий цикл потоку зазвичай включає кілька етапів:
- Створення: об'єкт потоку створюється, але ще не запущений;
- Запуск: викликається метод
start(), переводячи потік у стан готовності до виконання; - Виконання: потік виконує свою цільову функцію;
- Завершення: потік завершує виконання, або виконавши завдання, або при виникненні необробленого винятку.
Керування потоками вимагає ретельної уваги до синхронізації, оскільки потоки спільно використовують дані та ресурси. Без належної синхронізації можуть виникати стани гонки або неконсистентний стан. Модуль threading пропонує примітиви, такі як Lock, RLock та Event, для координації доступу потоків до спільних ресурсів.
Нижче наведено таблицю з функціями, які допоможуть створювати, керувати та синхронізувати потоки ефективно під час роботи з паралельними завданнями у Python.
У наступному прикладі показано, як можна створити та запустити кілька потоків за допомогою модуля threading, що дозволяє виконувати декілька завдань одночасно.
123456789101112131415161718192021import threading import time def print_numbers(name): for i in range(1, 4): print(f"Thread {name}: {i}") time.sleep(0.5) # Create thread objects thread1 = threading.Thread(target=print_numbers, args=("A",)) thread2 = threading.Thread(target=print_numbers, args=("B",)) # Start the threads thread1.start() thread2.start() # Wait for both threads to finish thread1.join() thread2.join() print("Both threads have finished.")
Визначається функція print_numbers, яка виводить послідовність чисел разом із назвою потоку. Під час створення кожного потоку аргументи передаються через параметр args — тут кожен потік отримує окрему назву ("A" або "B"), щоб легко розрізняти їхній вивід. Виклик методу start() запускає обидва потоки, і вони виконуються одночасно. Використання time.sleep(0.5) у циклі імітує затримку виконання, що дозволяє потокам чергувати свій вивід і наочно демонструє паралельну роботу. Метод join() використовується для очікування завершення обох потоків перед продовженням виконання, що гарантує, що основна програма не завершиться передчасно. Такий підхід дозволяє виконувати завдання паралельно, ефективно використовуючи час очікування та забезпечуючи конкурентне виконання в межах одного процесу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат