Python多处理,无法使用pool.map

时间:2019-05-30 23:13:58

标签: python mapping python-multiprocessing

我有一台具有256GB内存的32核计算机,对并行计算是新手。 我必须运行以下行:

Flag=data.flag [:,:,x]

这是一个非常大的矩阵。 “ x”是指我要存储到文件的子矩阵。但是“更改”了64次,每次迭代耗时+-8分钟,因此需要并行处理

我看了几个例子: https://www.machinelearningplus.com/python/parallel-processing-python/https://docs.python.org/3.7/library/multiprocessing.html#multiprocessing-programming

代码功能:

def multi_flagger(antenna_no):
    recv=data.corr_products[antenna_no][0]         # Gets the antenna name and polarization value
    flagger=data.flags[:, :, antenna_no]         # Flags the data based on the antenna value
    mat_flag = np.matrix(flagger)                # Morphs the 2d array into a matrix
    np.save('Flagged_data_'+str(recv)+'_.npy', mat_flag)  # Saves the data to a file

pool.map(multi_flagger, for i in range(2))
pool.close()

我收到此错误:

File "<ipython-input-58-e1a6f9779b9a>", line 1
   pool.map(multi_flagger, for i in range(2))
                             ^ SyntaxError: invalid syntax`

我想要的是将64个.npy文件写入磁盘

2 个答案:

答案 0 :(得分:1)

方法Pool.map(func, iterable)期望可迭代,可以是tuplelist。您不能像尝试过的那样通过for循环(for i in range(2)),而是可以通过list of numbers from a range

pool.map(multi_flagger, list(range(2)))  # [0, 1]

我不确定您的其余代码,但是使用Pool时,您需要在创建Pool实例时设置辅助进程的数量(如{{3 }}示例),然后调用map传递要执行的函数并输入函数:

def multi_flagger(antenna_no):
    recv=data.corr_products[antenna_no][0]         
    flagger=data.flags[:, :, antenna_no]         
    mat_flag = np.matrix(flagger)                    
    np.save('Flagged_data_'+str(recv)+'_.npy', mat_flag)

with Pool(processes=3) as pool:               # set the number of worker processes
    pool.map(multi_flagger, list(range(2)))   # pass a list of antenna_no
    pool.close()

答案 1 :(得分:0)

所以问题是与射电望远镜中使用的称为“ katdal”的特定包装有关。我想出了解决方案,这是因为标志线。每次需要读取数据

public void startgame() { ... }

但这给我带来了一个新问题,即一直在读取数据文件,这实际上占用了时间和空间。