当前位置:网站首页>第二十章 使用工作队列管理器(三)
第二十章 使用工作队列管理器(三)
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语言dplyr包select函数、group_by函数、filter函数和do函数获取dataframe中指定因子变量中指定水平中特定数值数据列的值第三大的值
- torch. nn. functional. Pad (input, pad, mode= 'constant', value=none) record
- 9 原子操作类之18罗汉增强
- 干货分享|DevExpress v22.1原版帮助文档下载集合
- Visual Studio 插件之CodeMaid自动整理代码
- Boot 和 Cloud 的版本选型
- LC:字符串转换整数 (atoi) + 外观数列 + 最长公共前缀
- R language dplyr package mutate_ At function and min_ The rank function calculates the sorting sequence number value and ranking value of the specified data column in the dataframe, and assigns the ra
- 关于ssh登录时卡顿30s左右的问题调试处理
- PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!
猜你喜欢
Navicat连接2002 - Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘解决
Nunjuks template engine
2022如何评估与选择低代码开发平台?
Openeuler prize catching activities, to participate in?
9 原子操作类之18罗汉增强
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
vulnhub之Funfox2
Ways to improve the utilization of openeuler resources 01: Introduction
项目经理『面试八问』,看了等于会了
Flink并行度和Slot详解
随机推荐
A pot of stew, a collection of common commands of NPM and yarn cnpm
Automatic classification of defective photovoltaic module cells in electroluminescence images-论文阅读笔记
谷歌seo外链Backlinks研究工具推荐
IP tools
AD域组策略管理
干货分享|DevExpress v22.1原版帮助文档下载集合
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
Implement secondary index with Gaussian redis
最多可以参加的会议数目[贪心 + 优先队列]
CSDN语法说明
使用高斯Redis实现二级索引
Classification automatique des cellules de modules photovoltaïques par défaut dans les images de lecture électronique - notes de lecture de thèse
华南X99平台打鸡血教程
论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
LeetCode_7_5
银行理财产品怎么买?需要办银行卡吗?
ASP. Net kindergarten chain management system source code
Open source heavy ware! Chapter 9 the open source project of ylarn causal learning of Yunji datacanvas company will be released soon!
浏览积分设置的目的
Mysql, sqlserver Oracle database connection mode