python - 为什么多处理会降低代码的速度?
问题描述
我正在编写一个非常耗时的代码。我正在尝试应用多处理来提高速度,但多处理代码的运行时间比原始代码多。原始代码是:
import numpy as np
import time
import random
class func:
def __init__(self, i1, i2, i3):
self.i1 = i1
self.i2 = i2
self.i3 = i3
p = 0.5
mean = 0
stddev = 1
self.N = self.i1 + self.i2 + self.i3
self.L1 = self.i1 + self.i2
self.w = np.zeros((self.N,self.N))
for i in range(0,self.i1):
for j in range(self.i1,self.L1):
if random.random() <= p:
self.w[i][j] = random.normalvariate(mean, stddev)
print(self.w)
i_1 = 2
i_2 = 3
i_3 = 2
t1 = time.perf_counter()
n = func(i_1,i_2,i_3)
t2 = time.perf_counter()
print(f'Finished in {t2-t1} seconds')
多处理的原始代码是:
import concurrent.futures
import numpy as np
import time
import random
class func:
def __init__(self, i1, i2, i3):
self.i1 = i1
self.i2 = i2
self.i3 = i3
p = 0.5
mean = 0
stddev = 1
self.N = self.i1 + self.i2 + self.i3
self.L1 = self.i1 + self.i2
self.w = np.zeros((self.N,self.N))
ii = range(self.i1)
def i_to_h1(i):
for j in range(self.i1,self.L1):
if random.random() <= p:
self.w[i][j] = random.normalvariate(mean, stddev)
with concurrent.futures.ThreadPoolExecutor() as
executor:
executor.map(i_to_h1, ii)
print(self.w)
i_1 = 2
i_2 = 3
i_3 = 2
t1 = time.perf_counter()
n = func(i_1,i_2,i_3)
t2 = time.perf_counter()
print(f'Finished in {t2-t1} seconds')
如果没有多重处理,运行代码需要 0.0005 秒,而使用多重处理需要 0.0029 秒。我不知道为什么以及如何做才能提高代码的速度。如果有人可以提供帮助,我将不胜感激。