当前位置:网站首页>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
参数指定要执行的拆解代码.
边栏推荐
- 第十五章 源代码文件 REST API 简介
- C language advanced article: memory function
- After completing the interview and clearance collection of Alibaba, I successfully won the 15th Offer this year
- 什么是分布式锁?几种分布式锁分别是怎么实现的?
- 肝完Alibaba这份面试通关宝典,我成功拿下今年第15个Offer
- 长江商业银行面试
- PolarFormer: Multi-camera 3D Object Detection with Polar Transformers 论文笔记
- mysql进阶(二十四)防御SQL注入的方法总结
- 学习软件测试需要掌握哪些知识点呢?
- 第5章 实现首页Tab数据展示
猜你喜欢
随机推荐
想学自动化测试网课哪个好?过了人告诉你:适合自己的才是最重要
The new interface, jingdong comment interface
【Verilog】HDLBits题解——Circuits/Sequential Logic/Latches and Flip-Flops
App自动化测试怎么做?实战分享App自动化测试全流程
解决oracle安装在linux中jdk的冲突
mysql advanced (twenty-four) method summary of defense against SQL injection
How does Filebeat maintain file state?
Blog records life
期货开户中常见问题汇总
7月份最后一篇博客
Image fusion GAN-FM study notes
利用ChangeStream实现Amazon DocumentDB表级别容灾复制
业界新标杆!阿里开源自研高并发编程核心笔记(2022最新版)
bash while loop and until loop
pytorch+tensorboard使用方法
R语言使用zoo包中的rollapply函数以滚动的方式、窗口移动的方式将指定函数应用于时间序列、计算时间序列的滚动标准差(设置每个窗口不重叠)
基于Sikuli GUI图像识别框架的PC客户端自动化测试实践
-找树根2-
(通过页面)阿里云云效上传jar
PC client automation testing practice based on Sikuli GUI image recognition framework