多个对象持有的数据的多处理

时间:2017-11-24 15:26:18

标签: python multithreading parallel-processing multiprocessing

这里的第一个问题所以我希望我做对了......

我已经编写了一段代码来处理多个数据集,方法如下: - 包含数据数组(numpy)的基类和操作此数据的所有方法(bk减法,归一化等)。 - 第二个类,它包含我用来在每个数据集上应用不同方法并计算平均值的所有不同数据对象。

现在问题 - 如果我们以数据的规范化为例,我正在迭代不同的对象并为每个对象调用规范化方法,但是,因为它们是分离的数据集,所以没有限制并行计算它,但是,如果我在进程完成后将规范化方法调用分配给进程,那么我最终会得到我开始使用的数据集。

import numpy as np
import multiprocessing as mp


class Scan(object):
    """ Basic scan object """

    def __init__(self):
        super(Scan, self).__init__()
        # Init the object with some numbers
        self.data = np.arange(0, 10)

    def normalize(self, low, nlow, high, nhigh):
        # Normalizes the scan
        self.data = (self.data - np.mean(self.data[low:(low + nlow)])) / \
                    (np.mean(self.data[(high - nhigh):high]) -
                     np.mean(self.data[low:(low + nlow)]))

def main():
    data_obj_list = []
    processes = []
    # Generate a list of data objects
    for i in range(10):
        data_obj_list.append(Scan())
    # Print an example
    print(data_obj_list[0].data) #[0, 1, ..., 10]
    # divides the normalization to separated processes
    for scans in data_obj_list:
        process = mp.Process(target=scans.normalize, args=(0, 1, 10, 1))
        process.start()
        processes.append(process)
    for process in processes:
        process.join()
    # Print an example 
    print(data_obj_list[0].data) #[0, 1, ..., 10]
    # normalizing the scans one by one 
    for scans in data_obj_list:
        scans.normalize(0, 1, 10, 1)
    # Print an example
    print(data_obj_list[0].data) #[0, 0.111, 0.222, ..., 1]

if __name__ == '__main__':
    main()      

如果我正确理解文档 - Python正在将所有状态复制到新进程中,并且在运行之后,所有副本都将被丢弃。

有关如何实现此并行计算(或参考此示例)的任何建议?我能找到的所有示例都使用返回值,而不是将更改存储在数据对象本身中。

非常感谢

0 个答案:

没有答案