我有一个500GB的数据集,并希望通过机器学习对其进行分析,这要求我提取所有将参数"phot_variable_flag"
设置为"VARIABLE"
的对象。数据集被分成约1000个子文件,我必须通过这些子文件来解析,因此希望使用多重处理来同时解析多个文件。
我已经用multiprocessing
阅读了Python的Pool
并实现了它,但是,由于某些Astropy命令(Table.read()
)未被执行而陷入困境。
我已经测试了以下代码:
print
显示和检查,表明所有内容均已正确加载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循环就像一个超级按钮一样工作,只是速度太慢而并行化却没有。