多处理池未运行熵功能

时间:2019-01-25 20:40:59

标签: python multiprocessing astropy

我有一个500GB的数据集,并希望通过机器学习对其进行分析,这要求我提取所有将参数"phot_variable_flag"设置为"VARIABLE"的对象。数据集被分成约1000个子文件,我必须通过这些子文件来解析,因此希望使用多重处理来同时解析多个文件。

我已经用multiprocessing阅读了Python的Pool并实现了它,但是,由于某些Astropy命令(Table.read())未被执行而陷入困境。

我已经测试了以下代码:

  • 输入数据已正确解析,可以用print显示和检查,表明所有内容均已正确加载
  • 一个简单的for循环遍历整个输入文件并将每个文件名传递给get_objects()函数,并产生正确的输出

因此,一个非常基本的非并行示例起作用。

import sys
import multiprocessing as mp
from astropy.table import Table

def get_objects(file):
    print(file)
    data = Table.read(file)
    print("read data")
    rnd = data[data["phot_variable_flag"] == "VARIABLE"]
    del data
    rnd.write(filepath)
    del rnd

args = sys.argv[1:]

if __name__ == '__main__':

   files = args[0:]

   pool = mp.Pool(processes=12)

   [pool.apply_async(get_objects, args=(file,)) for file in files]

运行此代码将按预期输出12个不同的文件名(意味着启动具有12个工作程序的Pool?)。但是,紧接着代码完成。 "read data" print语句不再执行,这意味着对Table.read()的调用失败。

但是,我没有收到任何错误消息,并且我的终端恢复运行,就像程序已正确退出一样。所有这些都是在一个时间范围内发生的,这使得Table.read()函数无法执行任何操作,因为单个文件需要大约2-3分钟的读取时间,但是在文件名被打印后,程序立即停止。 这是我完全被卡住的地方,因为for循环就像一个超级按钮一样工作,只是速度太慢而并行化却没有。

0 个答案:

没有答案