Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2021 10:57:54

Elanyor
Зарегистрирован: 2021-01-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing.Pool. Как использовать в имеющемся коде?

Мне поставлена задача: написать программу для расчета числа Pi методом монте-карло с использованием нескольких процессов на основе multiprocessing.Pool.

Первую часть задачи решил так:

 import random
k = 0.0
for i in range(50000):
    x = random.random()
    y = random.random()
    k += (x * x + y * y < 1.0)
print(4 * k / 50000)

Как распараллелить выполнение этой задачи с помощью multiprocessing.Pool?
import multiprocessing as mp. Дальше не знаю, что делать.
Подскажите, пожалуйста.

Офлайн

#2 Янв. 6, 2021 13:47:12

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

multiprocessing.Pool. Как использовать в имеющемся коде?

сначала вам нужно выделить в функцию операции которые можно распаралелить:

 def f(n):
    x=....
    ...
    return (x * x + y * y < 1.0)
потом создать пул :
 from multiprocessing import Pool
....
if __name__ == '__main__':
    pool = Pool( processes = 4) #количество процессов выбирайте сами.
потом скормить пулу функцию:
 res = poll.map(f, range(50000))
В res увас будет список результатов выполнения 50000 раз функции f в 4-х(или сколько вы там зададите) процессах. Дальше сумируете-умножаете-делите.




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 6, 2021 13:52:53)

Офлайн

#3 Янв. 6, 2021 14:01:11

Elanyor
Зарегистрирован: 2021-01-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing.Pool. Как использовать в имеющемся коде?

 import random
from multiprocessing import Pool
def f(n):
    x = random.random()
    y = random.random()
    return (x * x + y * y < 1.0)
if __name__ == '__main__':
    pool = Pool(processes = 4)
res = pool.map(f, range(50000))
print(res)

Наверное, я где-то намудрил. Ибо в res вообще пусто.

Офлайн

#4 Янв. 6, 2021 18:01:11

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

multiprocessing.Pool. Как использовать в имеющемся коде?

Последние две строчки кода нужно сдвинуть вправо на четыре пробела.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version