single
Challenge: The Parallel Square Collector
Свайпніть щоб показати меню
Мультипроцесінг у Python дозволяє запускати кілька процесів паралельно, кожен з власним інтерпретатором Python і простором пам'яті. Такий підхід особливо корисний для задач, що навантажують процесор (CPU-bound), коли потрібно використовувати кілька ядер процесора для пришвидшення обчислень. Використовуючи мультипроцесінг, можна суттєво підвищити продуктивність для операцій, які потребують інтенсивних обчислень, наприклад, обробки даних, наукових розрахунків або симуляцій.
Клас multiprocessing.Manager надає можливість створювати спільні об'єкти — такі як списки та словники — які можуть безпечно використовуватися та змінюватися кількома процесами. Коли потрібно збирати результати або координувати дані між окремими екземплярами Process, завжди використовуйте Manager для створення таких спільних об'єктів. Звичайні списки та словники Python не є спільними між процесами, тому зміни, внесені в одному процесі, не будуть видимі для інших. Використовуючи список Manager, кожен процес може додавати або змінювати дані, і всі зміни будуть видимі для кожного процесу, що використовує цей спільний об'єкт.
1234567891011121314151617181920from 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.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат