首页 > 解决方案 > 为什么多处理会降低代码的速度?

问题描述

我正在编写一个非常耗时的代码。我正在尝试应用多处理来提高速度,但多处理代码的运行时间比原始代码多。原始代码是:

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 秒。我不知道为什么以及如何做才能提高代码的速度。如果有人可以提供帮助,我将不胜感激。

标签: pythonmultiprocessingconcurrent.futures

解决方案


推荐阅读