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

2024-04-29 10:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我遇到了一个使用Pool对象及其方法map的示例,但是当我试图在类中的方法上实现它时,似乎spawnpoolworker无法将方法放入类中

例如,下面的代码给出了错误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)

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

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

1条回答
网友
1楼 · 发布于 2024-04-29 10:55:49

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

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]

相关问题 更多 >