【发布时间】:2018-07-03 10:39:17
【问题描述】:
我想在 Luigi 中设置一些目标路径作为全局变量。
原因是我使用的目标路径基于给定数值天气预报 (NWP) 的最后一次运行,并且需要一些时间才能获得该值。一旦我检查了哪个是最后一次运行,我将创建一个路径,我将在其中放置多个目标文件(具有相同的父文件夹)。
我目前正在重复一个类似的调用来获取多个任务的父路径的值,将此路径设置为全局变量会非常有效。我试图从一个由 luigi 类调用的函数 (get_target_path) 中定义全局变量,但是当我回到 Luigi 管道时,看起来全局变量不会持续存在。
这也是我的代码的样子:
class GetNWP(luigi.Task):
"""
Download the NWP data.
"""
product_id = luigi.Parameter()
date = luigi.Parameter(default=datetime.today().strftime('%Y%m%d'))
run_hr = luigi.Parameter(default='latest')
def requires(self):
return None
def output(self):
path = get_target_path(self.product_id, self.date, self.run_hr,
type='getNWP')
return luigi.LocalTarget(path)
def run(self):
download_nwp_data(self.product_id, self.date, self.run_hr)
class GetNWP_GFS(luigi.Task):
"""
GFS data.
"""
product_id = luigi.Parameter()
date = luigi.Parameter(default=datetime.today().strftime('%Y%m%d'))
run_hr = luigi.Parameter(default='latest')
def requires(self):
return None
def output(self):
path = get_target_path(self.product_id_PV, self.date, self.run_hr,
type='getNWP_GFS')
return luigi.LocalTarget(path)
def run(self):
download_nwp_data(self.product_id, self.date, self.run_hr,
type='getNWP_GFS')
class Predict(luigi.Task):
"""
Create forecast.
"""
product_id = luigi.Parameter(default=None)
date = luigi.Parameter(default=datetime.today().strftime('%Y%m%d'))
run_hr = luigi.Parameter(default='latest')
horizon = luigi.Parameter(default='DA')
def requires(self):
return [
GetNWP_GFS(self.product_id, self.date, self.run_hr),
GetNWP(self.product_id, self.date, self.run_hr)
]
def output(self):
path = get_target_path(self.product_id, self.date, self.run_hr,
type='predict', horizon=self.horizon)
return luigi.LocalTarget(path)
def run(self):
get_forecast(self.product_id, self.date, self.run_hr)
函数 get_target_path 根据输入参数定义目标路径。我希望这个函数设置可以从 Luigi 访问的全局变量。例如如下(只是getNWP任务的代码):
def get_target_path(product_id, date, run_hr, type=None, horizon='DA'):
"""
Obtain target path.
"""
if type == 'getNWP_GFS':
if 'path_nwp_gfs' in globals():
return path_nwp_gfs
else:
...
elif type == 'getNWP':
if 'path_nwp_model' in globals():
return path_nwp_model
else:
filename = f'{nwp_model}_{date}_{run_hr}_{horizon}.{ext}'
path = Path(db_dflt['app_data']['nwp_folder'])
create_directory(path)
global path_nwp_model
path_nwp_model = Path(path) / filename
elif type == 'predict':
if 'path_predict' in globals():
return path_predict
else:
...
当我回到 Luigi 时,这个函数中定义的全局变量不存在。
任何关于如何解决这个问题的想法将不胜感激!
【问题讨论】:
标签: python-3.x luigi