是否可以在 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]
我对 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]