METplus时间控制

news/2025/1/16 7:46:44/文章来源:https://www.cnblogs.com/jiangleads/p/18674050

参考:https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html
以下是chatgpt翻译:


5.6 常用配置变量

5.6.1 时间控制

本节介绍用于控制处理时间的 METplus wrapper 配置变量,同时涵盖了基于运行时钟时间设置运行时间以便实时处理数据的功能。


5.6.1.1 循环方式 (LOOP_BY)

METplus wrapper 可以配置为在一组有效时间(valid time)或初始化时间(initialization time)上循环。通过名为 LOOP_BY 的配置变量进行控制。当该变量的值设置为 INITRETRO 时,循环将基于初始化时间;当值设置为 VALIDREALTIME 时,循环将基于有效时间。


5.6.1.2 按Valid Time有效时间循环

在按有效时间循环(LOOP_BY = VALID 或 REALTIME)时,必须设置以下变量:

  • VALID_TIME_FMT

    • 定义用户可在 METplus wrapper 中配置的有效时间格式。
    • 例如:
      VALID_TIME_FMT = %Y%m%d%H
      
      格式示例:2019020112 表示 2019 年 2 月 1 日 12 时。
  • VALID_BEG

    • 指定要处理的第一个有效时间,与 VALID_TIME_FMT 格式一致。
  • VALID_END

    • 指定可处理的最后一个有效时间,与 VALID_TIME_FMT 格式一致。
注意:该变量指定的时间未必会被处理,而是用于决定运行时间的截止点。为此变量指定的时间不一定会被处理。它用于确定可以处理的运行时间的截止值。例如,如果METplus Wrappers配置开始为20190201,结束为20190202,增量为48小时,它将处理有效时间20190201,然后将运行时间增加到20190203, 这晚于VALID_END值,因此执行将停止。但是,如果增量设置为24小时(请参阅VALID_INCREMENT),则METplus Wrappers将在结束执行之前处理有效时间20190201和20190202。
  • VALID_INCREMENT

    • 指定每个运行时间的增量,用于计算下一个运行时间。单位为秒,最小支持 60 秒。

示例配置:

[config]
LOOP_BY = VALID
VALID_TIME_FMT = %Y%m%d%H
VALID_BEG = 2019020100
VALID_END = 2019020200
VALID_INCREMENT = 6H

此配置将处理从 2019 年 2 月 1 日 00Z 到 2019 年 2 月 2 日 00Z,每 6 小时(21600 秒)递增。

对于每个有效的时间,METplus wappers还将循环访问在当前运行时间均有效的一组预测线索。有关详细信息,请参阅Looping over Forecast Leads

VALID_LIST

如果运行时的间隔是不规则的,可以显式定义时间。下面是一个例子

[config]
LOOP_BY = VALID
VALID_TIME_FMT = %Y%m%d%H
VALID_LIST = 2019020100, 2019020106, 2019020112, 2019020118, 2019020200

更多信息,参见 VALID_LIST 

 


5.6.1.3 按Initialization Time初始化时间循环

在按初始化时间循环(LOOP_BY = INIT 或 RETRO)时,需设置以下变量:

  • INIT_TIME_FMT

    • 定义用户可在 METplus 包装器中配置的初始化时间格式。
    • 例如:
      INIT_TIME_FMT = %Y%m%d%H
      
      格式示例:2019020112 表示 2019 年 2 月 1 日 12 时。
  • INIT_BEG

    • 指定要处理的第一个初始化时间。
  • INIT_END

    • 指定可处理的最后一个初始化时间。
注意:不一定会处理为此变量指定的时间。它用于确定可以处理的运行时间的截止时间。例如,如果 METplus Wrappers 配置为从 2019-02-01 开始并于 2019-02-02 结束,以 48 小时为增量处理数据,则它将处理 2019-02-01,然后将运行时间增加到 2019-02-03 。这晚于 INIT_END 有效,因此执行将停止。但是,如果增量设置为 24 小时(请参阅 INIT_INCRMENT),则 METplus Wrappers 将在结束执行之前处理初始化时间 2019-02-012019-02-02
  • INIT_INCREMENT

    • 指定每个运行时间的增量,用于计算下一个运行时间。

示例配置:

[config]
LOOP_BY = INIT
INIT_TIME_FMT = %Y%m%d%H
INIT_BEG = 2019020100
INIT_END = 2019020200
INIT_INCREMENT = 6H

 此配置将处理从 2019 年 2 月 1 日 00Z 到 2019 年 2 月 2 日 00Z,每 6 小时递增。

  • INIT_LIST

If the intervals between run times are irregular, then an explicit list of times can be defined. The following example will process the same times as the previous example:

[config]
LOOP_BY = INIT
INIT_TIME_FMT = %Y%m%d%H
INIT_LIST = 2019020100, 2019020106, 2019020112, 2019020118, 2019020200

See the glossary entry for INIT_LIST for more information.

 


5.6.1.4 按Forecast Leads预报时效循环

许多wrappers还将循环遍历相对于当前valid/initialization time的预报时效forecast leads列表。

  • LEAD_SEQ

此变量定义相对于当前有效/初始化时间的预报时效列表。逗号分隔。例如:

LEAD_SEQ = 3, 6, 9

If LOOP_BY = VALID and the current run time is 2019-02-01 at 00Z, then three times will be processed:

  1. Initialized on 2019-01-31 at 21Z / valid on 2019-02-01 at 00Z

  2. Initialized on 2019-01-31 at 18Z / valid on 2019-02-01 at 00Z

  3. Initialized on 2019-01-31 at 15Z / valid on 2019-02-01 at 00Z

If LOOP_BY = INIT and the current run time is 2019-02-01 at 00Z, then three times will be processed:

  1. Initialized on 2019-02-01 at 00Z / valid on 2019-02-01 at 03Z

  2. Initialized on 2019-02-01 at 00Z / valid on 2019-02-01 at 06Z

  3. Initialized on 2019-02-01 at 00Z / valid on 2019-02-01 at 09Z

所以,LOOP_BY=VALID(过去)不同起报时间的预报到当前时间,LOOP_BY=INIT相同起报时间(当前)预报未来不同时间

对于许多预报,还可以使用开始结束增量Begin End Increment (begin_end_incr)定义 LEAD_SEQ。例如:

[config]
LEAD_SEQ = begin_end_incr(0,12,3)

等价于

[config]
LEAD_SEQ = 0, 3, 6, 9, 12

 

Forecast Leads分组

也可以使用特殊的 LEAD_SEQ  变量对预测潜在客户进行分组。如果 {APP_NAME}_RUNTIME_FREQ, 比如 SERIES_ANALYSIS_RUNTIME_FREQ, 设置成 RUN_ONCE_PER_INIT_OR_VALID, 那么预报时效分组可以一起评估。然后可以定义预测线索组来一起评估。可以通过设置配置变量 LEAD_SEQ_1、LEAD_SEQ_2、...、LEAD_SEQ_<n> 来定义任意数量的这些组。该值可以使用逗号分隔的整数列表(目前仅支持小时)或使用开始结束增量 (begin_end_incr) 来定义。每个 LEAD_SEQ_<n> 必须有一个相应的变量 LEAD_SEQ_<n>_LABEL。比如:b For example:

[config]
LEAD_SEQ_1 = 0, 6, 12, 18
LEAD_SEQ_1_LABEL = Day1
LEAD_SEQ_2 = begin_end_incr(24,42,6)
LEAD_SEQ_2_LABEL = Day2

在本例子中,标签Day1 成员为 0, 6, 12, 18, 标签 Day2成员为24, 30, 36, 42.

 

Forecast leads 同样可以用以下方法定义:用一个单独的LEAD_SEQ,然后对于每个group使用LEAD_SEQ_GROUP_SIZE指定group size。比如:

[config]
LEAD_SEQ = 0, 12, 24, 36
LEAD_SEQ_GROUP_SIZE = 1d

这个配置将会创建预报的组,每个组的大小是1天。这个等价于:

[config]
LEAD_SEQ_1 = 0, 12
LEAD_SEQ_2 = 24, 36

每个组将会被标签为 Group<INDEX> 其中 <INDEX>是 group number. 在本例子中,标签Group1 为 0, 12 ,而 Group2将会是24, 36. 标签可以使用{label}被索引在文件名模板中。

 

如果想把字符“Group”改成其他字符串,可以设置(参见 LEAD_SEQ_GROUP_LABEL) :

LEAD_SEQ_GROUP_LABEL = Day

这样就可以把组的名字改成成Day1和Day2.

LEAD_SEQ_<n>_LABEL 也可以用于修改特定的某一组的名称,对于之前的例子,设置:

LEAD_SEQ_2_LABEL = SecondDay

就会将组名字改成Day1 和 SecondDay.

如果forecast leads列表包含一个gap,即没有属于给定组的leads,则该组将被跳过。例如:

[config]
LEAD_SEQ = 0, 12, 48, 60
LEAD_SEQ_GROUP_SIZE = 1d
LEAD_SEQ_GROUP_LABEL = Day

标签Day1 will be used for 0, 12,标签Day3 will be used for 48, 60,标签Day2不会创建(因为没有24,)。

 

INIT_SEQ

如果 METplus Wrappers 配置为按有效时间循环 (LOOP_BY = VALID),则可以使用 INIT_SEQ 代替 LEAD_SEQ。这是数据中可用的初始化时间列表。这非常有用,如果需要根据评估的有效时间使用不同的 forecast leads(数据初始化时间已知)。例如:

[config]
LOOP_BY = VALID
INIT_SEQ = 0, 6, 12, 18

在有效时间2019-02-01 00Z,该初始化序列将构建0、6、12、18、24、30等的forecast lead列表,并且,在有效时间2019-02-01 01Z,该初始化序列将构建预测领先名单为 1、7、13、19、25、31 等。

如果使用 INIT_SEQ, 通过设置 LEAD_SEQ_MIN 和 LEAD_SEQ_MAX 限制将使用的预报时效 forecast leads。例如,仅处理 12 到 24 组之间的forecast leads :

[config]
LEAD_SEQ_MIN = 12
LEAD_SEQ_MAX = 24

在有效时间 2019-02-01 00Z,该初始化序列将构建 12、18、24 的forecast leads列表,在有效时间 2019-02-01 01Z,该初始化序列将构建 13、19 的forecast lead列表(跳过了25)。
如果使用 LEAD_SEQ,设置最小值和最大值也会影响预测潜在客户列表。 LEAD_SEQ 优先于 INIT_SEQ,因此如果在配置中设置了这两个变量,则 INIT_SEQ 将被忽略,而优先于 LEAD_SEQ。

 


5.6.1.5 时间间隔单位

配置变量中定义的时间间隔都有默认值:LEAD_SEQ 和 INIT_SEQ 默认为小时,VALID_INCRMENT 和 INIT_INCRMENT 默认为秒。还可以通过在数字末尾添加字母(分别为 Y、m、d、H、M 或 S)来指定年、月、日、小时、分钟或秒的单位。如果未指定单位,则假定为秒。

3600 : 3600 seconds
3600S : 3600 seconds
60M : 60 minutes or 3600 seconds
1H : 1 hour or 3600 seconds
1m : 1 month (relative)
1d : 1 day or 24 hours or 86400 seconds
1Y : 1 year (relative)

月(m)和年(Y)的单位没有固定的间隔,因为月或年的长度是相对于相对日期/时间而言的。因此,这些间隔是根据当前运行时间计算的,并且不能以秒为单位表示,除非运行时间值可用。

 


5.6.1.6 跳过时间 (SKIP_VALID_TIMES)

支持通过配置跳过特定时间。例如:

SKIP_VALID_TIMES = "%d:30,31"

此配置将跳过每月的 30 日和 31 日。

支持按星期跳过时间:

SKIP_VALID_TIMES = "%a:Sun,Tue,Thu,Sat"

此配置仅处理周一、周三和周五。

Version 3.1 added the ability to skip certain valid times. The configuration variable SKIP_VALID_TIMES (formerly SKIP_TIMES) can be used to provide a list of time formats each with a list of times to not process. Version 6.0.0 added support for skipping initialization times using SKIP_INIT_TIMES and including specific valid and/or initialization times using INC_VALID_TIMES and INC_INIT_TIMES.

The format and time list are separated by a colon. Any numeric python strftime formatting directive can be used as the time format (see https://strftime.org). Each item in the list must be surrounded by quotation marks.

The following examples involve skipping and/or including valid times, but the same formatting and rules apply to the corresponding initialization time variables.

Example 1:

[config]
SKIP_VALID_TIMES = "%m:3"

This will skip the 3rd month, March.

Example 2:

[config]
SKIP_VALID_TIMES = "%d:30,31"

This will skip every 30th and 31st day.

Example 3:

[config]
SKIP_VALID_TIMES = "%d:30,31", "%m:3"

This will skip every 30th and 31st day and every 3rd month.

Begin End Increment (begin_end_incr) syntax can be used to define a range of times to skip.

b = begin value, e = end value,

i = increment between each value

Example 4:

[config]
SKIP_VALID_TIMES = "%H:begin_end_incr(0,22,2)"

This will skip every even hour (starting from 0, ending on 22, by 2). This is equivalent to:

[config]
SKIP_VALID_TIMES = "%H:0,2,4,6,8,10,12,14,16,18,20,22"

Multiple strftime directives can be specified in a single time format.

Example 5:

[config]
SKIP_VALID_TIMES = "%Y%m%d:19991231, 20141031"

This will skip the dates Dec. 31, 1999 and Oct. 31, 2014.

To only skip certain times for a single wrapper, use a wrapper-specific variable. Using a wrapper-specific variable will ignore the generic SKIP_VALID_TIMES values.

Example 6:

[config]
GRID_STAT_SKIP_VALID_TIMES = "%m:3,4,5,6,7,8,9,10,11"
SKIP_VALID_TIMES = "%d:31"

This will skip the months March through November for GridStat wrapper only. All other wrappers in the PROCESS_LIST will skip the 31st day of each month. Note that the SKIP_VALID_TIMES values are not applied to GridStat in this case.

Support for skipping times by the day of the week was added in v6.0.0.

Example 7:

[config]
SKIP_VALID_TIMES = "%a:Sun,Tue,Thu,Sat"

This will skip all days of the week except for Monday, Wednesday, and Friday.

Also added in v6.0.0 is the ability to specify times to include with INC_VALID_TIMES. If this is set, then any times that do not match the include rules will be skipped.

Example 8:

[config]
INC_VALID_TIMES = "%a:Mon,Wed,Fri"

This will skip all days of the week except for Monday, Wednesday, and Friday.

INC_VALID_TIMES also supported wrapper-specific versions, e.g. GRID_STAT_INC_VALID_TIMES.

INC_VALID_TIMES and SKIP_VALID_TIMES can be used together.

Example 9:

[config]
INC_VALID_TIMES = "%a:Mon,Wed,Fri"
SKIP_VALID_TIMES = "%d:1"

This will only process times that land on Monday, Wednesday, and Friday except the 1st of the month.

 


5.6.1.7 Realtime Looping实时循环

可使用以下关键字定义实时运行时间:

  • {now}:当前时间
  • {today}:当前日期
  • shift:偏移量
  • truncate:向下取整

示例:

VALID_BEG = {now?fmt=%Y%m%d%H?shift=-86400?truncate=21600}
VALID_END = {now?fmt=%Y%m%d%H}

此配置将从前一天的最近 6 小时时间间隔开始运行,直到当前时间。

Now and Today

为了使实时运行更容易,METplus Wrappers 支持定义相对于当前时钟时间的开始和结束时间。例如,如果当前时间是 2019-04-26 08:17 并且 METplus Wrappers 运行时:

[config]
VALID_END = {now?fmt=%Y%m%d%H}

then the value of VALID_END will be set to 2019042608. {today} can also be used to substitute the current YYYYMMDD, i.e. 20190426. The formatting for the ‘today’ keyword cannot be changed..

 

Shift Keyword

“shift”关键字可用于将当前时间移动任意秒数。例如,如果 METplus Wrappers 在同一时钟时间运行:

[config]
VALID_BEG = {now?fmt=%Y%m%d%H?shift=-86400}

then the value of VALID_BEG will be set to the current clock time shifted by -86400 seconds (24 hours backwards), or 2019-04-25 08Z.

The value defined for ‘shift’ also supports Time Interval Units.

If VALID_INCREMENT is set to 21600 seconds (6 hours), then the METplus Wrappers will process the following valid times:

2019-04-25 08Z
2019-04-25 14Z
2019-04-25 20Z
2019-04-26 02Z
2019-04-26 08Z
Truncate Keyword

用户可能希望将 METplus Wrappers 配置为在给定日期的 00Z、06Z、12Z 和 18Z(而不是 02Z、08Z、14Z 和 20Z)进行处理。如果在 08Z 或 09Z 运行,则必须以不同方式调整换档量才能使时间对齐,这将是很乏味的。相反,请使用“truncate”关键字。此处设置的值是用于确定向下舍入的时间间隔的秒数。要每 6 小时处理一次,请将“截断”设置为 21600 秒:

[config]
VALID_BEG = {now?fmt=%Y%m%d%H?shift=-86400?truncate=21600}

这会将值向下舍入到最接近的 6 小时时间间隔。在 20190426 的 06Z -12Z 之间(左闭右开)启动 METplus Wrappers 将导致 VALID_BEG = 2019042506(时钟时间向后移动 24 小时,然后截断为最近的 6 小时时间)。

Starting METplus Wrappers on 20190426 at 08:16 with the following configuration:

[config]
LOOP_BY = VALID
VALID_TIME_FMT = %Y%m%d%H
VALID_BEG = {now?fmt=%Y%m%d%H?shift=-86400?truncate=21600}
VALID_END = {now?fmt=%Y%m%d%H}
VALID_INCREMENT = 21600

 

will process valid times starting on 20190425 at 06Z every 6 hours until the current run time is later than 20190426 at 08Z, which will result in processing the following valid times:

20190425_06
20190425_12
20190425_18
20190426_00
20190426_06
 

Note

使用“now”关键字时,VALID_TIME_FMT 的值必须与 VALID_BEG 和 VALID_END 中“now”项对应的“fmt”值相同。在上面的示例中,这将是 VALID_TIME_FMT、VALID_BEG 和 VALID_END 变量值内的 %Y%m%d%H 部分。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869975.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shiro550 分析复现

shiro550 分析复现shiro是java中用来处理鉴权问题的组件,提供了快捷的用户鉴权认证功能.在shrio版本低于1.2.24的时候存在shiro550漏洞,我们clone一个P牛的项目去进行实验测试.实验环境为java8u65 看一下项目添加的依赖: <dependencies><dependency><groupId>…

手摸手实战前端项目CI CD

由于图片和格式解析问题,为了更好阅读体验可前往 阅读原文CI/CD 是 持续集成(Continuous Integration) 和 持续交付/部署(Continuous Delivery/Continuous Deployment) 的缩写,是现代软件开发中的一种自动化方法论,用于加速代码交付和部署的流程,同时保证代码质量和稳定…

读量子霸权05量子计算机种类

量子计算机有多种设计,包括超导、离子阱、光量子、硅光子、拓扑等,各有优缺点。IBM、谷歌等公司发布量子计算机,光量子计算机有望超越其他类型。D-Wave量子计算机在优化领域表现出色。1. 竞赛 1.1. 能够有效发挥作用的计算机体系结构不止一种 1.2. 图灵机就是在可应用于广泛…

dotnet C# 在不同的机器 CPU 型号上的基准性能测试

本文将记录我在多个不同的机器上,在不同的 CPU 型号上,执行相同的我编写的 dotnet 的 Benchmark 的代码,测试不同的 CPU 型号对 C# 系的优化程度。本文非严谨测试,数值只有相对意义以下是我的测试结果,对应的测试代码放在 github 上,可以在本文末尾找到下载代码的方法 我…

dotnet 对一些 Win32 方法进行 Benchmark 基准性能测试

本文记录对一些 Win32 方法进行 Benchmark 基准性能测试本文非严谨测试,仅在我开发机器进行测试,没有在纯净系统和机器上进行测试 开始之前的说明: 本文使用的是 BenchmarkDotNet 进行测试,没有考虑 AOT 之后的调用性能,仅仅只是 Release 版本的 dotnet 程序的调用而已 数…

洞悉图数据库:构建未来的基石

代码无法创建多段文本或复杂格式内容在实际情况下你可能会利用多行样式设置图像和链接来增强一个网站页面但…………HTML</no value> 代码无法创建多段文本或复杂格式内容。在实际情况下,你可能会利用多行、样式设置、图像和链接来增强一个网站页面,但我能给你提供关于…

在外漂泊的这几年总结和感悟,展望未来

大家好,我加入博客园已经七年了。我是在2017年参加国内第一份全职实习时创建了博客园账号,读了求救信,并最近并办理了园子会员。希望博客园越来越好!最后想说一句:“其他er 和 .NETer,大家不要再打了,一起合作,共同拯救园子吧!” 在国内的日子 我在2017年至2018年国内…

使用python实现tcp通信

TCP协议使服务器和客户端通过socket进行通信服务器端通信流程如下: 1.使用socket类创建一个套接字对象 2.使用bind(ip,port)方法绑定IP地址和端口号 3.使用listen()方法开始TCP监听 4.使用accept0方法等待客户端的连接 5.使用recv0/send0方法接收/发送数据 6.使用close0关闭套…

使用python实现tcp一次通信

TCP协议使服务器和客户端通过socket进行通信服务器端通信流程如下: 1.使用socket类创建一个套接字对象 2.使用bind(ip,port)方法绑定IP地址和端口号 3.使用listen()方法开始TCP监听 4.使用accept0方法等待客户端的连接 5.使用recv0/send0方法接收/发送数据 6.使用close0关闭套…

树莓派Linux安装usb摄像头/打印机

设备HP IR Camara USB\VID_04F2&PID_B634&REV_0012&MI_02 HP Wide Vision FHD Camera USB\VID_04F2&PID_B634&REV_0012&MI_00 USB小票机 USB\VID_0471&PID_0055&REV_0100lsusb 命令列出设备 插入设备前 alex@raspberrypi:~ $ lsusb Bus 002 De…

How to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In One

How to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In OneHow to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In One errorssolutions $ cat /etc/locale.gen$ sudo vim /etc/locale.gen # 1. 开启 zh_CN.UTF-8 UTF-8, 即…

ciscn_2019_ne_5

先让我们输入s1,如果不是administrator程序将退出。 然后输入1会让我们输入src(限制读入128个字符)输入2会展示我们输入的src,输入3有个system 输入4会将src拷贝到dest里面,注意到strcpy没有限制,而dest离ebp为0x48,而src最多可以输入128.所以我们可以利用这个进行栈溢出…