当前位置:网站首页>Using the Work Queue Manager (4)
Using the Work Queue Manager (4)
2022-08-03 12:32:00 【User 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
参数指定要执行的拆解代码.
边栏推荐
- 图像融合GAN-FM学习笔记
- I in mother's womb SOLO20 years
- 解决oracle安装在linux中jdk的冲突
- 【Verilog】HDLBits题解——Circuits/Sequential Logic/Latches and Flip-Flops
- 查看GCC版本_qt版本
- AMS simulation
- pandas连接oracle数据库并拉取表中数据到dataframe中、筛选当前时间(sysdate)到一天之前的所有数据(筛选一天范围数据)
- 5个超好用手机开源自动化工具,哪个适合你?
- From scratch Blazor Server (6) - authentication based on strategy
- 可重入锁详解(什么是可重入)
猜你喜欢
海外代购系统/代购网站怎么搭建——源码解析
想学自动化测试网课哪个好?过了人告诉你:适合自己的才是最重要
AMS simulation
PC client automation testing practice based on Sikuli GUI image recognition framework
Image fusion SDDGAN article learning
Apache APISIX 2.15 版本发布,为插件增加更多灵活性
How to build an overseas purchasing system/purchasing website - source code analysis
3年软件测试经验,不懂自动化基础...不知道我这种测试人员是不是要被淘汰了?
【精品必知】Pod生命周期
第5章 实现首页Tab数据展示
随机推荐
LyScript 实现对内存堆栈扫描
长江商业银行面试
App自动化测试怎么做?实战分享App自动化测试全流程
fastposter v2.9.0 程序员必备海报生成器
基于php旅游网站管理系统获取(php毕业设计)
nacos应用
PolarFormer: Multi-camera 3D Object Detection with Polar Transformers 论文笔记
【云原生 · Kubernetes】部署Kubernetes集群
想学自动化测试网课哪个好?过了人告诉你:适合自己的才是最重要
Kubernetes 网络入门
链游NFT元宇宙游戏系统开发技术方案及源码
Oracle安装完毕(系统盘),从系统盘转移到数据盘
After completing the interview and clearance collection of Alibaba, I successfully won the 15th Offer this year
第十五章 源代码文件 REST API 简介
数据库系统原理与应用教程(076)—— MySQL 练习题:操作题 160-167(二十):综合练习
浅谈程序员的职业操守
如何免费获得一个市全年的气象数据?降雨量气温湿度太阳辐射等等数据
Unsupervised learning KMeans notes and examples
mysql进阶(二十四)防御SQL注入的方法总结
15. PARTITIONS「建议收藏」