当前位置:网站首页>第二十章 使用工作队列管理器(三)
第二十章 使用工作队列管理器(三)
2022-07-07 17:56:00 【yaoxin521123】
文章目录
第二十章 使用工作队列管理器(三)
管理类别
一个类别是一个独立的worker jobs池。当初始化一组worker jobs时,可以指定提供worker的类别。如果集合中的任何worker jobs在执行work项时请求额外的worker jobs,则新的worker jobs来自同一类别。
例如,假设系统提供的 SQL 类别分配了最多 8
个worker。然后,假设与BusinessIntelligence
相关的流程创建了一个类别,并将最多四个worker分配给该类别。如果 SQL 池中的所有worker在给定时间都参与了工作,则 BusinessIntelligence
类别中的worker可能仍然可以立即处理工作项。
系统包括两个不能删除的类别:SQL
和 Default
。 SQL 类别适用于系统执行的任何 SQL 处理,包括查询的并行处理。当在未指定类别的情况下初始化一组worker jobs时,默认类别提worker jobs。
每个类别都具有影响该类别中每个工作队列的行为的属性。这些属性是:
DefaultWorkers
当创建此类别中的工作队列且未指定worker job 计数时,这将成为工作队列中worker job 的数量。此属性的默认值是核心数。
MaxActiveWorkers
在此类别的job服务请求池中保留的活动worker job的最大数量。检测到空闲job并自动启动新job以将最大活动job数保持在此限制附近。默认值为核心数的两倍。
MaxWorkers
此类别中工作队列的最大worker job数。如果在创建工作队列时指定了更多的worker job,则使用此限制。默认值为核心数的两倍。
要创建类别、调整类别属性和删除自定义类别,请导航到System Administration > Configuration > System Configuration > WQM Categories
.。自定义类别的名称区分大小写,可能包含字母、数字、下划线、破折号和句点。
使用回调
回调是工作队列管理器在完成工作项后必须执行的代码。可以使用回调有两个原因:
- 执行依赖于工作项完成的工作
- 如果选择异步完成工作项,则表示所有排队的工作都已完成
包括工作项的回调
要添加回调,请在将工作项添加到工作队列时调用 QueueCallback()
方法而不是 Queue()
方法:
method QueueCallback(work As %String, callback As %String, args... As %String) as %Status
work 和 args 方法与 Queue()
方法相同。但是,回调参数使用以下语法指定要执行的回调代码:
##class(Classname).ClassMethod
用于类方法$$entry^rtn
用于子程序
类方法或子例程必须以相同的顺序接受与主工作项相同的参数。主进程将相同的参数传递给主工作项和回调代码。
回调代码可以访问以下公共变量:
%job
,其中包含实际完成工作的进程的作业ID
%status
,其中包含工作单元返回的%Status
值%workqueue
,即工作队列实例的OREF
这些公共变量在回调中可用,但在工作项中不可用。
包括回调以确定完成
可以轮询工作队列管理器以确定完成,而不是使用 WaitForComplete()
方法等待工作队列中的所有排队工作完成后再返回主进程,如下所示:
- 如上一节所述,使用
QueueCallback()
方法而不是Queue()
方法将工作项添加到工作队列。 - 当所有工作项的工作完成后,在回调代码中将公共变量
%exit
设置为1
。 - 使用
Wait()
方法而不是WaitForComplete()
方法:
method Wait(qspec As %String, byRef AtEnd As %Boolean) as %Status
Wait()
方法等待来自回调的信号返回给调用者。具体来说,它等待回调代码将公共变量 %exit
设置为等于 1
。Wait()
通过引用返回 AtEnd
。 AtEnd
为 1
时,所有工作都已完成。或者,如果 AtEnd
为 0
,则一个或多个工作项未完成。
控制当前设备的输出
默认情况下,如果工作项向当前设备生成输出(WRITE
语句),工作队列会将输出保存在缓冲区中,直到 WaitForComplete()
或 Wait()
结束。如果希望工作项更早地生成输出,请让该工作项调用 %SYSTEM.Context.WorkMgr
类的 Flush()
类方法,例如:
set sc = $system.Context.WorkMgr().Flush()
当工作项调用此方法时,会导致父工作队列写入工作项的所有已保存输出。
此外,可以使用 -d
标志来禁止对当前设备的所有输出。在这种情况下,Flush()
方法什么也不做,因为没有输出。
暂停和恢复工作队列
%SYSTEM.WorkMgr
类提供了可用于在工作队列中暂停和恢复工作的方法:
Pause()
method Pause(timeout As %Integer, ByRef completed As %Boolean = 0) as %Status
阻止与此工作队列关联的worker jobs接受来自此工作队列的其他项目。 Pause()
方法还会停止任何正在进行的工作项。
timeout
参数表示方法在停止正在进行的工作项之前等待的时间量(以秒为单位)。超时时间过后,该方法返回完成值,该值指示调用 Pause()
方法时正在进行的工作项是否已完成。因此,可以传入超时值 0
以立即知道worker jobs是否完成了工作队列中的所有工作项。
Resume()
method Resume() as %Status
如果之前已使用 Pause()
方法暂停,则恢复此工作队列中的工作。具体来说,此方法使工作队列进程能够接受并启动工作队列中的任何其他项目。
边栏推荐
- R语言fpc包的dbscan函数对数据进行密度聚类分析、查看所有样本的聚类标签、table函数计算聚类簇标签与实际标签构成的二维列联表
- R语言ggplot2可视化:使用ggpubr包的ggviolin函数可视化小提琴图、设置palette参数自定义不同水平小提琴图的填充色、add参数在小提琴图添加箱图
- torch.nn.functional.pad(input, pad, mode=‘constant‘, value=None)记录
- J ü rgen schmidhub reviews the 25th anniversary of LSTM papers: long short term memory All computable metaverses. Hierarchical reinforcement learning (RL). Meta-RL. Abstractions in generative adversar
- 模拟实现string类
- R语言ggplot2可视化:使用ggpubr包的ggstripchart函数可视化分组点状条带图(dot strip plot)、设置position参数配置不同分组数据点的分离程度
- Version selection of boot and cloud
- 线性基
- Simulate the implementation of string class
- Is PMP beneficial to work? How to choose a reliable platform to make it easier to prepare for the exam!!!
猜你喜欢
Openeuler prize catching activities, to participate in?
vulnhub之tre1
Navicat连接2002 - Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘解决
PMP对工作有益吗?怎么选择靠谱平台让备考更省心省力!!!
Kirin Xin'an with heterogeneous integration cloud financial information and innovation solutions appeared at the 15th Hunan Financial Technology Exchange Conference
J ü rgen schmidhub reviews the 25th anniversary of LSTM papers: long short term memory All computable metaverses. Hierarchical reinforcement learning (RL). Meta-RL. Abstractions in generative adversar
Some important knowledge of MySQL
多个线程之间如何协同
Sword finger offer II 013 Sum of two-dimensional submatrix
九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」
随机推荐
Flink并行度和Slot详解
[sword finger offer] sword finger offer II 012 The sum of left and right subarrays is equal
[confluence] JVM memory adjustment
The project manager's "eight interview questions" is equal to a meeting
9 atomic operation class 18 Rohan enhancement
PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!
[RT thread env tool installation]
ASP. Net kindergarten chain management system source code
openEuler 资源利用率提升之道 01:概论
CSDN syntax description
The state cyberspace Office released the measures for data exit security assessment: 100000 information provided overseas needs to be declared
Kubernetes——kubectl命令行工具用法详解
How to buy bank financial products? Do you need a bank card?
银行理财产品怎么买?需要办银行卡吗?
一锅乱炖,npm、yarn cnpm常用命令合集
开源OA开发平台:合同管理使用手册
R language ggplot2 visualization: use the ggecdf function of ggpubr package to visualize the grouping experience cumulative density distribution function curve, and the linetype parameter to specify t
实训九 网络服务的基本配置
Nunjuks template engine
MSE API学习