Я использовал пул из двух рабочих, чтобы разделить сумму в функции с многопроцессорной обработкой Python, но время не усPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я использовал пул из двух рабочих, чтобы разделить сумму в функции с многопроцессорной обработкой Python, но время не ус

Сообщение Anonymous »

Файл кода Python представлен ниже. Я использую Python 3.10.12 на Linux mint 21.3 (на случай, если какая-либо из этих сведений понадобится). Тот, у которого пул из двух воркеров, занимает больше времени, чем тот, у которого нет многопроцессорной обработки. Что я здесь делаю не так?

Код: Выделить всё

import multiprocessing
import time
import random

def fun1( x ):
y = 0
for i in range( len( x ) ):
y = y + x[i]
return( y )

def fun2( x ):
p = multiprocessing.Pool( 2 )
y1, y2 = p.map( fun1, [ x[ : len( x ) // 2 ], x[ len( x ) // 2 : ] ] )
y = y1 + y2
return( y )

x = [ random.random() for i in range( 10 ** 6 ) ]

st = time.time()
ans = fun1( x )
et = time.time()
print( f"time = {et - st}, answer = {ans}." )

st = time.time()
ans = fun2( x )
et = time.time()
print( f"time = {et - st}, answer = {ans}." )

x = [ random.random() for i in range( 10 ** 7 ) ]

st = time.time()
ans = fun1( x )
et = time.time()
print( f"time = {et - st}, answer = {ans}." )

st = time.time()
ans = fun2( x )
et = time.time()
print( f"time = {et - st}, answer = {ans}." )
Вот что я получаю в терминале.

Код: Выделить всё

time = 0.043381452560424805, answer = 499936.40420325665.
time = 0.1324300765991211, answer = 499936.40420325927.
time = 0.4444568157196045, answer = 5000677.883536603.
time = 0.8388040065765381, answer = 5000677.883536343.
Я также использовал строку if __name__ == '__main__': после fun2 и перед остальными я получаю те же результаты на терминале. Я также попробовал Python 3.6.2 на сервере Codio. У меня похожее время.

Код: Выделить всё

time = 0.048882484436035156, answer = 499937.07655266096.
time = 0.15220355987548828, answer = 499937.0765526707.
time = 0.4848289489746094, answer = 4999759.127770024.
time = 1.4035391807556152, answer = 4999759.127769606.
Думаю, что-то не так с тем, что я делаю в своем коде, непонимание того, как использовать multiprocessing.Pool, а не Python, но не могу подумать чего. Любая помощь будет оценена по достоинству. Я ожидаю, что, используя двух рабочих, я получу ускорение в два раза, а не снижение. Также, если необходимо, я проверил с помощью multiprocessing.cpu_count(), на сервере Codio 4 процессора, а на моем компьютере 12 процессоров.

Подробнее здесь: https://stackoverflow.com/questions/792 ... processing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»