当前位置:网站首页>使用工作队列管理器(四)
使用工作队列管理器(四)
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 参数指定要执行的拆解代码。
边栏推荐
- R language ggplot2 visualization: use the patchwork bag plot_layout function will be more visual image together, ncol parameter specifies the number of rows, specify byrow parameters configuration dia
- bash while loop and until loop
- 7月份最后一篇博客
- Explain the virtual machine in detail!JD.com produced HotSpot VM source code analysis notes (with complete source code)
- I in mother's womb SOLO20 years
- 免费的网络传真平台_发传真不显示发送号码
- [数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念「建议收藏」
- 信创建设看广州|海泰方圆亮相2022 信创生态融合发展论坛
- 【精品必知】Pod生命周期
- bash while循环和until循环
猜你喜欢

nacos app

App自动化测试怎么做?实战分享App自动化测试全流程

论文理解:“Gradient-enhanced physics-informed neural networks for forwardand inverse PDE problems“

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

学习软件测试需要掌握哪些知识点呢?

【云原生 · Kubernetes】部署Kubernetes集群

长城简漫·暑期安全篇⑤ 这个强,不能逞

基于php家具销售管理系统获取(php毕业设计)

fastposter v2.9.0 程序员必备海报生成器

TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
随机推荐
【Verilog】HDLBits题解——验证:阅读模拟
期货公司开户关注的关键点
数据库系统原理与应用教程(075)—— MySQL 练习题:操作题 151-159(十九):综合练习
五、函数的调用过程
Five super handy phone open-source automation tools, which is suitable for you?
基于Sikuli GUI图像识别框架的PC客户端自动化测试实践
特征降维学习笔记(pca和lda)(1)
浅谈程序员的职业操守
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、使用tab_add_vline函数自定义表格中竖线(垂直线)的线条类型以及线条粗细
从零开始Blazor Server(6)--基于策略的权限验证
Take you understand the principle of CDN technology
详解虚拟机!京东大佬出品HotSpot VM源码剖析笔记(附完整源码)
Vs Shortcut Keys---Explore Different Programming
长城简漫·暑期安全篇⑤ 这个强,不能逞
3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?
PC client automation testing practice based on Sikuli GUI image recognition framework
面试突击71:GET 和 POST 有什么区别?
第3章 搭建短视频App基础架构
-找树根2-
Mysql重启后innodb和myisam插入的主键id变化总结