Python Threading і Multiprocessing для початківців
У Python обробка одночасних завдань може значно підвищити продуктивність ваших програм, особливо коли ви маєте справу з операціями, пов’язаними з введенням/виведенням або з процесором. Python надає два основні модулі для паралелізму: threading
і multiprocessing
. Ця стаття познайомить вас із цими модулями та пояснить, як їх використовувати для паралельного програмування.
Розуміння потоків
Потоковість — це спосіб одночасного запуску кількох потоків (менших одиниць процесу) в одному процесі. Це корисно для завдань, пов’язаних із введенням/виведенням, коли ви витрачаєте багато часу на очікування зовнішніх ресурсів (наприклад, файлового введення/виведення, мережевих запитів).
Приклад базової обробки потоків
Щоб створювати потоки та керувати ними в Python, ви використовуєте модуль threading
. Ось простий приклад:
import threading
# Define a function to be run in a thread
def print_numbers():
for i in range(5):
print(i)
# Create a thread object
thread = threading.Thread(target=print_numbers)
# Start the thread
thread.start()
# Wait for the thread to complete
thread.join()
print("Thread has finished execution")
Розуміння багатопроцесорності
Багатопроцесорність дозволяє запускати кілька процесів одночасно, кожен з яких має власний інтерпретатор Python і простір пам’яті. Це особливо корисно для завдань, пов’язаних із процесором, де потрібно виконувати обчислення паралельно.
Базовий приклад багатопроцесорної обробки
Модуль multiprocessing
використовується для створення та керування окремими процесами. Ось простий приклад:
import multiprocessing
# Define a function to be run in a process
def compute_square(number):
print(f"The square of {number} is {number * number}")
# Create a process object
process = multiprocessing.Process(target=compute_square, args=(5,))
# Start the process
process.start()
# Wait for the process to complete
process.join()
print("Process has finished execution")
Порівняння потоків і багатопроцесорності
- Threading: найкраще підходить для завдань, пов’язаних із вводом-виводом. Потоки спільно використовують один і той самий простір пам’яті і можуть бути більш ефективними для операцій, які включають очікування.
- Багатопроцесорність: найкраще підходить для завдань, пов’язаних із ЦП. Процеси виконуються в окремих просторах пам’яті та можуть повністю використовувати кілька ядер ЦП для важких обчислювальних завдань.
Загальні випадки використання
- Threading: підходить для таких завдань, як сканування веб-сторінок, операції введення/виведення файлів або будь-які завдання, пов’язані з очікуванням зовнішніх ресурсів.
- Багатопроцесорність: ідеально підходить для обробки даних, математичних обчислень або будь-яких завдань, які потребують значних ресурсів ЦП.
Висновок
І threading
, і multiprocessing
є потужними інструментами для покращення продуктивності та ефективності ваших програм Python. Розуміючи, коли і як використовувати ці модулі, ви можете писати більш ефективні та адаптивні програми. Незалежно від того, чи маєте ви справу із завданнями, пов’язаними з вводом-виводом, чи обчисленнями, пов’язаними з процесором, Python надає інструменти, необхідні для ефективної обробки паралельних операцій.