是否可以在 class 方法中进行多处理,并按顺序获取返回值?

Is it possible to do multiprocessing within a class method, and obtain the returning values in an order?

我对 python 比较陌生,尤其是它的多处理功能。显然在 python 中我读到要进行适当的多处理是使用它的 multiprocessing 库,它实际上创建了新的 python 进程,这与其他进程不同,其他进程在同一核心内划分为线程。

我遇到了一个使用 Pool 对象及其方法 map 的示例,但是当我尝试在 class 中的方法上实现它时,似乎spawnpoolworker 无法到达 class.

中的方法

例如下面的代码给出错误AttributeError: 'A' object has no attribute '__multiply'.

import multiprocessing as mp
import time

class A:
    def __init__(self,data):
        self.__data = data
        self.sum = [0]*len(data)
        self.__multiprocess()

    def __multiply(self,num):
        time.sleep(1)
        return num*2

    def __multiprocess(self):
        pool = mp.Pool()
        results = pool.map(self.__multiply,self.__data)

        for i, result in zip(len(self.__data), results):
            self.sum[i] = result

if __name__ == "__main__":
    data = list(range(0,8))
    a = A(data)
    print(a.sum)

有没有一种方法可以让我保留 class 的结构而不将其拆分为函数,同时按照给定数据的顺序给出结果?

print(a.sum)
[0, 2, 4, 6, 8, 10, 12, 14]

您可以使用此代码块。问题是使用 __(私有函数)

import multiprocessing as mp
import time

class A:
     def __init__(self,data):
         self.__data = data
         self.sum = [0]*len(data)
         self.multiprocess()

     def multiply(self,num):
         time.sleep(1)
         return num*2

     def multiprocess(self):
         pool = mp.Pool()
         results = pool.map(self.multiply,self.__data)

         for i, result in zip(range(len(self.__data)), results):
             self.sum[i] = result

if __name__ == "__main__":
     data = list(range(0,8))
     a = A(data)
     print(a.sum)
[0, 2, 4, 6, 8, 10, 12, 14]