当前位置:网站首页>使用工作队列管理器(四)
使用工作队列管理器(四)
2022-08-03 12:19:00 【用户7741497】
分离和附加工作队列
通常,初始化一组工作程序,将工作项排队,然后等待工作程序完成工作项。但是,可能会遇到工作人员作业完成工作项所需的时间比预期更长的情况,或者无法将单个进程专门用于等待。因此,工作队列管理器使能够将工作队列与进程分离,然后将工作队列附加到同一进程或不同的进程。
例如,假设队列引用了初始化的工作队列。还假设向工作队列中添加了几个工作项。在调用 Wait() 或 WaitForComplete() 来确定正在处理的工作的状态之前,可以使用以下方法:
Detach()
method Detach(ByRef token As %String, timeout As %Integer=86400) as Status从初始化工作队列时创建的对象引用中分离工作队列对象。 Detach() 方法使任何正在进行的工作能够继续并保留工作队列的当前状态。
token 参数表示一个安全令牌,可以使用它随后将工作队列附加到另一个进程。 timeout 参数是可选的,它指示系统保留分离的工作队列对象的时间量(以秒为单位)。超时期限过后,系统会删除与工作队列关联的所有工作人员作业和信息。超时的默认值为 1 天。
调用 Detach() 方法后,对分离对象引用的大多数调用都会返回错误。但是,NumActiveWorkers() 和 NumWorkers() 方法返回 -1。
Attach()
Attach(token, ByRef sc As %Status) as WorkMgr如果工作队列对象仍在内存中,则将新对象引用附加到先前分离的工作队列对象。 Attach() 方法返回与工作队列关联的工作队列管理器的新实例。可以随后调用工作队列上的方法。例如,可以调用超时值为 0 的 Wait() 方法来确定队列在分离之前是否已完成任何工作项。
token 参数表示之前在工作队列上调用的 Detach() 方法返回的安全令牌。
例如,可以分离然后附加一个工作队列,如下所示:
s sc = queue.Detach(.token,60)
if $$$ISERR(sc) {
ret sc
}
s queue = $system.WorkMgr.Attach(token,.sc)
if $$$ISERR(sc) {
ret sc
}停止工作队列并删除工作项
可以停止工作队列、中断正在进行的任何工作项并移除任何排队的工作项。为此,请调用工作队列的 Clear() 方法。
method Clear(timeout As %Integer = 5) as %Status给定超时时间超时(以秒为单位),此方法等待工作人员作业完成其当前任务,然后终止作业。系统删除然后重新创建工作队列,不附加任何工作项。之后,系统立即从 Wait() 或 WaitForComplete() 返回。
指定安装和拆卸处理
每个工作队列通常有多个worker jobs。如果工作项多于工作项,则工作项将执行多个工作项,一次一个。在这些工作项开始之前确定所需的任何设置步骤并在将工作项添加到队列之前调用所有此类逻辑是很有用的。
%SYSTEM.WorkMgr 类提供方法 Setup() 和 TearDown(),可以使用它们来定义工作人员作业的设置活动和清理活动。例如,使用 Setup() 设置在工作作业中使用的公共变量,并使用 TearDown() 杀死这些变量。还可以使用 Setup() 取出锁并设置进程私有全局变量,并且将使用 TearDown() 释放这些锁并删除这些全局变量。
在任何一种情况下,都必须在调用 Queue() 或 QueueCallback() 之前调用 Setup()、TearDown() 或两者。 Setup() 和 TearDown() 方法将信息保存在仅供工作队列管理器使用的内部全局变量中。当任何工作人员作业从该队列开始其第一个工作项时,该工作人员作业首先检查工作管理器队列全局变量以查看是否有任何设置逻辑。如果是这样,worker 作业将执行该逻辑,然后启动工作项。 worker 作业不会再次执行设置逻辑。类似地,在任何工作作业完成队列中的最后一个工作项后,该工作作业检查是否有任何拆卸逻辑。如果是这样,worker 作业将执行该逻辑。
下面提供了这些方法的详细信息:
Setup()
method Setup(work As %String, args... As %String) as %Status指定工作进程在处理队列中的第一项之前要调用的代码。如果使用此方法,则必须在调用 Queue() 或 QueueCallback 方法之前调用它。 Setup() 接受以下参数:
work- 要执行的设置代码。此参数支持的语法与Queue()方法的work参数支持的语法相同,这在上一节中进行了描述。args- 此代码的参数的逗号分隔列表。要将多维数组作为参数传递,可以在该参数前面加上句点,以便通过引用传递它。应该保持在这些参数中传递的数据的大小相对较小。要提供大量信息,可以使用全局而不是传递参数。
TearDown()
method TearDown(work As %String, args... As %String) as %Status指定工作进程在处理完队列中的最后一项后调用以将进程恢复到其先前状态的代码。如果使用此方法,则必须在调用 Queue() 或 QueueCallback 方法之前调用它。
TearDown() 接受与 Setup() 方法相同的参数。但是,work 参数指定要执行的拆解代码。
边栏推荐
猜你喜欢

(通过页面)阿里云云效上传jar

第4章 搭建网络库&Room缓存框架

漫谈缺陷管理的自动化实践方案

苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景

分享一款实用的太阳能充电电路(室内光照可用)

Apache APISIX 2.15 版本发布,为插件增加更多灵活性

肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer

一次内存泄露排查小结

What knowledge points do you need to master to learn software testing?

How to do App Automation Testing?Practical sharing of the whole process of App automation testing
随机推荐
[Verilog] HDLBits Problem Solution - Verification: Writing Testbenches
YOLOv5训练数据提示No labels found、with_suffix使用、yolov5训练时出现WARNING: Ignoring corrupted image and/or label
如何免费获得一个市全年的气象数据?降雨量气温湿度太阳辐射等等数据
shell编程条件语句
Simple implementation of a high-performance clone of Redis using .NET (1)
别再用if-else了,分享一下我使用“策略模式”的项目经验...
详解虚拟机!京东大佬出品HotSpot VM源码剖析笔记(附完整源码)
Vs 快捷键---探索不一样的编程
超多精美礼品等你来拿!2022年中国混沌工程调查启动
-树的高度-
Autumn recruitment work
海外代购系统/代购网站怎么搭建——源码解析
广州番禺:暑期防溺水,安全不放假
How can I get a city's year-round weather data for free?Precipitation, temperature, humidity, solar radiation, etc.
fastposter v2.9.0 程序员必备海报生成器
[深入浅出]三位数排序
子结点的数量
php microtime 封装工具类,计算接口运行时间(打断点)
图像融合GAN-FM学习笔记
【云原生 · Kubernetes】部署Kubernetes集群