Python 处理合并结果
Python process merge results
我目前正在尝试实施 class 来进行密集微积分:
import random
import multiprocessing as mp
class IntensiveStuff:
def __init__(self):
self.N = 20
self.nb_process = 4
set_of_things = set()
def lunch_multiprocessing(self):
processes = []
for i in range(self.nb_process):
processes.append(mp.Process(target=self.process_method, args=()))
[x.start() for x in processes]
[x.join() for x in processes]
set_of_things = ... # I want all the sub_set of 'process_method' updated in set_of_things
def process_method(self):
sub_set = set()
for _ in range(self.N):
sub_set.add(random.randint(100))
我想计算独立微积分,将结果放在每个进程的 sub_set 中,并将所有 sub_set 合并到 set_of_things 中(在实际代码中是对象) .
我尝试使用 Queue 但没有成功,有什么建议吗?
P.S :已尝试重现 中的代码,但也没有成功。
进程不能共享内存,但它们可以通过管道、套接字等进行通信。多处理模块有特殊的对象(我相信,它们在后台使用管道)。 multiprocessing.Queue 应该也可以,但我经常使用这两个对象:
multiprocessing.Manager().list() 和
multiprocessing.Manager().dict()
results = multiprocessing.Manager().list()
# now a bit of your code
processes = []
for i in range(self.nb_process):
processes.append(mp.Process(target=self.process_method, args=(), results))
def process_method(self, results):
sub_set = set()
for _ in range(self.N):
sub_set.add(random.randint(100))
results.append(sub_set) # or what you really need to add to results
我目前正在尝试实施 class 来进行密集微积分:
import random
import multiprocessing as mp
class IntensiveStuff:
def __init__(self):
self.N = 20
self.nb_process = 4
set_of_things = set()
def lunch_multiprocessing(self):
processes = []
for i in range(self.nb_process):
processes.append(mp.Process(target=self.process_method, args=()))
[x.start() for x in processes]
[x.join() for x in processes]
set_of_things = ... # I want all the sub_set of 'process_method' updated in set_of_things
def process_method(self):
sub_set = set()
for _ in range(self.N):
sub_set.add(random.randint(100))
我想计算独立微积分,将结果放在每个进程的 sub_set 中,并将所有 sub_set 合并到 set_of_things 中(在实际代码中是对象) .
我尝试使用 Queue 但没有成功,有什么建议吗?
P.S :已尝试重现
进程不能共享内存,但它们可以通过管道、套接字等进行通信。多处理模块有特殊的对象(我相信,它们在后台使用管道)。 multiprocessing.Queue 应该也可以,但我经常使用这两个对象:
multiprocessing.Manager().list() 和 multiprocessing.Manager().dict()
results = multiprocessing.Manager().list()
# now a bit of your code
processes = []
for i in range(self.nb_process):
processes.append(mp.Process(target=self.process_method, args=(), results))
def process_method(self, results):
sub_set = set()
for _ in range(self.N):
sub_set.add(random.randint(100))
results.append(sub_set) # or what you really need to add to results