Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Робота з потоками | Багатопотоковість vs. Багатопроцесність
Структурне програмування на Python

Робота з потоками

Свайпніть щоб показати меню

Модуль threading у Python надає простий, але потужний спосіб створення та керування потоками, що дозволяє виконувати кілька операцій одночасно в межах одного процесу. Потоки — це легковагові одиниці виконання, які спільно використовують одну й ту ж область пам'яті, що робить їх придатними для завдань, таких як операції введення/виведення, очікування зовнішніх ресурсів або оновлення інтерфейсів користувача.

Життєвий цикл потоку зазвичай включає кілька етапів:

  • Створення: об'єкт потоку створюється, але ще не запущений;
  • Запуск: викликається метод start(), переводячи потік у стан готовності до виконання;
  • Виконання: потік виконує свою цільову функцію;
  • Завершення: потік завершує виконання, або виконавши завдання, або при виникненні необробленого винятку.

Керування потоками вимагає ретельної уваги до синхронізації, оскільки потоки спільно використовують дані та ресурси. Без належної синхронізації можуть виникати стани гонки або неконсистентний стан. Модуль threading пропонує примітиви, такі як Lock, RLock та Event, для координації доступу потоків до спільних ресурсів.

Нижче наведено таблицю з функціями, які допоможуть створювати, керувати та синхронізувати потоки ефективно під час роботи з паралельними завданнями у Python.

У наступному прикладі показано, як можна створити та запустити кілька потоків за допомогою модуля threading, що дозволяє виконувати декілька завдань одночасно.

123456789101112131415161718192021
import 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() використовується для очікування завершення обох потоків перед продовженням виконання, що гарантує, що основна програма не завершиться передчасно. Такий підхід дозволяє виконувати завдання паралельно, ефективно використовуючи час очікування та забезпечуючи конкурентне виконання в межах одного процесу.

question mark

Яке з наступних тверджень щодо синхронізації потоків у Python є правильним?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 3. Розділ 2
some-alt