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

single

Challenge: The Parallel Square Collector

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

Мультипроцесінг у Python дозволяє запускати кілька процесів паралельно, кожен з власним інтерпретатором Python і простором пам'яті. Такий підхід особливо корисний для задач, що навантажують процесор (CPU-bound), коли потрібно використовувати кілька ядер процесора для пришвидшення обчислень. Використовуючи мультипроцесінг, можна суттєво підвищити продуктивність для операцій, які потребують інтенсивних обчислень, наприклад, обробки даних, наукових розрахунків або симуляцій.

Note
Примітка

Клас multiprocessing.Manager надає можливість створювати спільні об'єкти — такі як списки та словники — які можуть безпечно використовуватися та змінюватися кількома процесами. Коли потрібно збирати результати або координувати дані між окремими екземплярами Process, завжди використовуйте Manager для створення таких спільних об'єктів. Звичайні списки та словники Python не є спільними між процесами, тому зміни, внесені в одному процесі, не будуть видимі для інших. Використовуючи список Manager, кожен процес може додавати або змінювати дані, і всі зміни будуть видимі для кожного процесу, що використовує цей спільний об'єкт.

1234567891011121314151617181920
from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))

Цей код демонструє використання multiprocessing.Manager для створення спільного списку, до якого можуть отримувати доступ і вносити зміни кілька процесів. Кожен процес обчислює квадрат числа та додає результат до спільного списку. Завдяки використанню списку Manager всі процеси можуть безпечно обмінюватися та збирати дані, що дозволяє отримувати результати від окремих процесів, які виконуються паралельно.

Завдання

Проведіть, щоб почати кодувати

Напишіть функцію під назвою compute_square, яка приймає одне ціле число та список results як аргументи, обчислює квадрат цього числа та додає результат до списку results.

Далі, використовуючи клас multiprocessing.Process, створіть окремий процес для кожного числа зі списку numbers, щоб обчислити його квадрат паралельно. Зберіть результати з усіх процесів і збережіть їх у змінній results.

  • Реалізуйте функцію compute_square, яка приймає два аргументи: число для піднесення до квадрату та список results.
  • У функції compute_square обчисліть квадрат числа та додайте його до списку results.
  • Для кожного числа зі списку numbers створіть об'єкт Process, який викликає compute_square з відповідними аргументами: числом і списком results.
  • Запустіть усі процеси, а потім приєднайте їх, щоб переконатися, що всі обчислення завершені перед перевіркою результатів.
  • Збережіть усі обчислені квадрати у списку results.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

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

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

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

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

some-alt