中文queue帮助2
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:38355018个文字广告月20元广告联系QQ:3835501广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:3835501广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关Mysql→中文queue帮助2

中文queue帮助2
中文queue帮助2
6 。Jobs - In Detail 工作工详细信息

本节描述的内部结构和性能的一个HQueue工作。你可以跳过这一节如果你只是关心如何提交工作从霍迪尼和如何监督它们。这部分的文件是针对谁的人计划建立自己的工作,并提交以外的霍迪尼(即从一个Python脚本)。但是,多一些了解的HQueue职务设计不伤害,因为这将有助于澄清一些用语整个网络界面。

6.1 。一个简单的例子

其最基本的形式,一个HQueue的工作仅仅是一套命令。当它被分配给客户机的计划,这组命令被执行。如果该命令通过,那么工作是说,已经成功,否则,这项工作据说已经失败。

例如,假设我们要建立的工作只是打印"Hello World!"到控制台。在这种情况下,命令集将仅仅是:
echo "Hello World!"

当 它被提交给HQueue ,这项工作经过数个国家完成前。这是一个描绘的地位的变化为我们的世界您好例如:

waiting for machine ==> running==> succeeded

我们的工作是初步建立与等待机状态。在这个时候,调度搜寻可用的客户机上的农场。当一个人被发现,调度分配给我们的工作和机器通知有关转让。客户端响应的通知,并拿起工作从HQueue服务器。工作中的地位是改变它的运行和执行的命令集是在客户端上。一旦执行完成后,客户联系HQueue服务器和最后的工作是为成功。

很简单?

6.2 。The Job Specification(工作规范)

每HQueue就业是指由一个规范-结构简单,载工作性能。具体而言,是一个规范的Python字典的键属性名称和价值观的财产价值。

我们的世界您 好例如,工作规范的外观如下:
{
        "name": "Print HelloWorld",
        "shell": "bash",
        "command": "echo 'HelloWorld!'"
}

在这 个例子中,我们可以看到,有3个工作性能-名称,壳牌和指挥。的性质表明,就业的标题是“打印世界您好”,该终端壳牌执行时要使用的命令是“庆祝” (如反对肽或tcsh等) ,以及一个命令是将被处决在用户端机器上,具体而言,“回声世界您好! ” 。

如 需完整清单的工作性质,可以包括在工作规范,见6.4 。工作属性。
提交工作规范

现 在,我们的世界您好就业的定义,我们可以使用规范的提交工作HQueue。要做到这一点,我们可以写一个简单的Python脚本:
import xmlrpclib

# Connect to the HQueue server.
hq_server =xmlrpclib.ServerProxy("http://hq_server_hostname:5000")

# Define a job which prints "Hello World!".
job_spec = {
        "name": "Print HelloWorld",
        "shell": "bash",
        "command": "echo 'HelloWorld!'"
}

# Submit the job to the server.
# newjob() returns a list of job ids (in case multiple jobsare passed in at once).
job_ids = hq_server.newjob(job_spec)

在上面的脚本,我们首先建立连接服务器的HQueue使用xmlrpclib的Python模块。一旦建立连接,我们将存储提到它在hq_server变数。下一步,我们确定我们的世界您好职务,并指定规格的job_spec变数。最后,我们提出的工作HQueue致电newjob( )方法从HQueue服务器的API (见10 。巨蟒的API的完整列表,功能) 。请注意,我们通过规范作为一个参数来newjob()。一旦提交的工作, HQueue生成一个唯一的ID ,并返回给调用者身份。在上面的例子中,我们将存储的ID到job_ids。

Commandless Jobs

应当指出的是,唯一的财产的要求的工作规范名称。甚至没有命令的财产是必要的。乔布斯没 有命令仍然可以运行在HQueue,但分配给客户机,它们不从事任何工作。

有时 commandless就业可以是有益的。例如,您可能要测试要求newjob()对HQueue服务器负担的农场没有与任何真实的任务。或者您可能想创建一个commandless“集装箱”的工作依赖于其他工作,使其他工作似乎是组合在一起时,浏览网页界面。就业相依中有详细的解释在下一节。

6.3 。 Parent-Child Relationships(亲子关系)

有时候,一份工作,说不能去,不能执行,直到再就业,就业乙说,已完成。换言之,就业A的依赖就业B.在HQueue术语,当存在这种依赖,不能去被认为是家长的就业职位乙B和被认为是儿童的工作答:
一种简单亲子为例

假设我们要创建一个AVI视频从几 帧说, 3,在一个场景。假设我们已经生成的通用档案这些框架,这项工作可以在2个步骤:

    1。产生帧图像使用咒语。
    2。编码成一个视频图像。

对于第一 步,我们定义一个HQueue工作,将每帧的通用和生成图像使用咒语。这项工作的第1帧渲染的外观:
{
        "name": "Render Frame1",
        "shell": "bash",
        "command":
               "cd $HQROOT/houdini_distros/hfs;
               source houdini_setup;
               mantra <$HQROOT/path/to/ifds/frame0001.ifd"
}

工 作规范,使第二次和第三次帧类似。

让我们假设咒语生成图像的道路上的共享网络驱动器,说$ HQROOT /路径/要/输出/帧*.png格式。然后编码步骤,我们可以通过在这些图像作为输入编码的实用工具。因此, HQueue工作编码的步骤如下所示:
{
        "name": "Encode Video",
        "shell": "bash",
        "command":
               "someEncoder--input=$HQROOT/path/to/output/frame*.png--output=$HQROOT/path/to/output/myVideo.avi"
}

现在,我们可以创建一个依赖从编码工作的3个职位,以便提供的编码不启动,直到渲染完成。一旦提供工作完成后,然后编码工作是分配给客户机,并处决。

要 创建的依赖,我们可以使用儿童财产。儿童接受财产清单儿童工作规范。

所以最后我们的编码规范的工作 会是什么样子:
{
        "name": "Encode Video",
        "shell": "bash",
        "command":
               "someEncoder--input=$HQROOT/path/to/output/frame*.png--output=$HQROOT/path/to/output/myVideo.avi",
        "children": [
               {
                       "name": "Render Frame1",
                       "shell": "bash",
                       "command":
                       "cd$HQROOT/houdini_distros/hfs;
                       source houdini_setup;
                       mantra <$HQROOT/path/to/ifds/frame0001.ifd"
               },
               {
                       "name": "Render Frame2",
                       "shell": "bash",
                       "command":
                       "cd$HQROOT/houdini_distros/hfs;
                       source houdini_setup;
                       mantra <$HQROOT/path/to/ifds/frame0002.ifd"
               },
               {
                       "name": "Render Frame3",
                       "shell": "bash",
                       "command":
                       "cd$HQROOT/houdini_distros/hfs;
                       source houdini_setup;
                       mantra <$HQROOT/path/to/ifds/frame0003.ifd"
               },
        ]
}

地 位变迁

儿童依赖性,父母的工作举措,通过一种略有不同的流动状态的变化:

waiting for children ==> waiting for machine==> running ==> succeeded

父母的工作是初步的等待孩子的地位。在这个时候,调度指派客户机向儿童工作和儿童工作开始执行。当孩子们完成后,母公司工作的地位的变化,以等待机器。调度位于一个可用的客户机和分配给母公司工作。一旦客户端拿起工作从HQueue服务器,父母的地位改变运行。最后,当母公司完成,它改变成功。
提 交儿童乔布斯从家长

有可能提出新的儿童工作内部运行工作。您可能要做到这一点,例如,如果您有几个任务需要处理,但您不知道有多少这些任务,直到您需要运行。在这种情况下,您可以添加到您的命令母公司工作,计算出有多少儿童需要,并提交规格为孩子的HQueue服务器。

提交新的儿童的工作,您可以使用newjob ( )API函数。指派新的就业作为一个孩子,您可以通过目前的工作的ID作为参数。在运行工作,编号存储在$ JOBID环境变量。

下 面是一个例子Python脚本创建一个新的工作,并指定它作为儿童的当前正在运行的工作:
import os
import xmlrpclib

# Connect to the HQueue server.
hq_server =xmlrpclib.ServerProxy("http://hq_server_hostname:5000")

# Define the child job.
child_job_spec = {
        "name": "The ChildJob",
        "shell": "bash",
        "command": "echo 'HelloWorld!'"
}

# Get the id of the current job.
# It should be defined in the environment.
current_job_id = os.environ["JOBID"]

# Submit the job to the server.
# newjob() returns a list of job ids (in case multiple jobsare passed in at once).
job_ids = hq_server.newjob(job_spec,parentId=current_job_id)

现 在,如果我们保存这个脚本到一个文件,说createChild.py,我们可以将其添加到命令财产母公司工作。因此,父母工作的规范将如下所示:
{
        "name": "The ParentJob",
        "shell": "bash",
        "command": "python$HQROOT/path/to/scripts/createChild.py"
}

请 注意,地位变化的工作,提出了自己的孩子稍有不同:

waiting for machine ==> running==> waiting for children ==>succeeded


父 母没有工作最初的儿童,因此它的地位将等待机器。当客户机分配和执行它的任务是改变运行。在执行过程中,提出了新的儿童工作的HQueue服务器。虽然母公司继续运行,其子女被分配到客户端机器和它们运行良好。当母公司完成,它需要等待其子女才可以宣布,它成功地和它的地位是改变等待儿童。当所有的孩子完成,然后家长的工作是最后设置为成功。

6.4 。工作性质

下 面列出的工作性质,可以存在于工作规范。
物业名称描述
children   儿童的名单工作规范提交给服务器。新的工作机会被指派为儿童。
childrenIds 的名单身份证现有的工作岗位,应当指定为儿童。
command    指挥的命令执行的指派客户机。
cpus       最低数量的CPU ,就业将使用。默认值为1 。
description 描述的职务说明。
environment环境字典变量来定义的环境中工作时的指令集是一台机器上执行。钥匙和价值观的字典是变量名称和值分别。
host       主机的主机名机的工作应执行的。如果此属性未设置,那么可以执行职务的任何机器。
maxHosts   的最大数量的客户机需要处理的工作。默认值为1 。
minHosts   的最低人数要求的客户机来处理工作。默认值为1 。
name       名称的标题工作。
priority   优先的工作重点。职位较高的优先安排和处理工作,在降低优先事项。 0是最低的优先事项。默认值为0。
shell      壳牌壳牌终端时要使用执行工作的命令集。
tags       标签列表。标签可以用来控制的职位是否需要一个专门的机器,或是否可以共用一台机器与其他运行工作。欲了解更多信息,见6.5。工作标签。
triesLeft   多少次工作应自动重组,企图使其成功后失败的。如果失败后的工作`triesLeft `次,那么它仍然是失败。默认值是0 。

工作性质为例

下 面是一个例子,工作规范,这表明使用的一些属性:
{
        "name": "The Main Job",
        "shell": "bash",
        "environment": {
               "SHOW_MSG": "1",
               "MSG": "Hello World!"
        },
        "command":
               "if [ $SHOW_MSG = 1 ]; then
                       echo $MSG;
               fi",
        "tags": [ "single" ],
        "maxHosts": 1,
        "minHosts": 1,
        "priority": 0,
        "children": [
               {
                       "name": "The ChildJob",
                       "shell": "bash",
                       "command": "echo 'HelloWorld!'"
               }
        ]
}

上面的例子定义了一个工作命名为“主要项目”具有优先级 为0 。它使用'庆典'壳牌执行其命令集,它定义了两个变量, “SHOW_MSG ”和“味精” ,在环境中。其指令集直接提到这两个变量。这项工作需要一个专用的机器所界定的“单一”标记和“maxHosts ”和“ minHosts ”属性。最后,它有一个单一的儿童工作的打印出的“ Hello World ”。


6.5 。就业标签

标签可以用来描述的职位是否需要一个专门的机器,或是否可以共用一台机器与其他运行工作。如果没有指定标签,然后在默认情况下,这项工作是设定为共享它的机器上运行,只要有足够的CPU的机器。

宣布你的工作需要一个专门的机器,购买的“单一”标记的标签财产。这样可以保证没有其他人将被分配到机器,而你的任务是执行。

您也可以创建自定义的单一的标签来控制这台运行工作可以共享这台机器和不能。共享工程的规则如下-永远的调度运行工作分配给同一台机器如果有匹配的标签。

要 创建自定义单一标记,只需前缀的标记名称的“单一” 。

例如,假设我们创建一个自定义单标记名为 “单: 1 ”,并分配给两个人,说A和B.和假设我们创建另一个自定义单一标记名为“单: 2 ”,并指派给其他两个人,说C和D这意味着,乔布斯A和B不能执行在同一台机器上同时也是如此就业C和D,但就业工作A或B可以运行在同一台机器上正在运行的工作C或就业D反之亦然。

6.6 。工作状态

下 面列出的所有工作状态和他们的说明。
状态描述
abandoned 放弃工作是分配给客户机,但机器没有报告其进展情况或状态。可能会发生这种情况,如果没有机器(即重新启动),同时运行工作。
cancelled 取消了就业已不再是调度队列,因为它的用户中断之前完成。
failed   未能完成的工作是一个错误,但据报道在执行其命令集时,或执行其后裔职务的命令集。
paused   暂停职务已被暂停的用户。调度不指定客户机的工作虽然有这样的地位。如果这项工作已在运行的计算机上,然后停止执行。
pausing  暂停职务上运行的客户机,但已要求用户停止执行。该HQueue服务器正在等待从客户端联系,以确认工作已暂停。
resuming 恢复工作是分配给客户机和目前已暂停,但已下令由用户恢复执行。该HQueue服务器正在等待从客户端联系,以确认工作已经恢复。
running   运行工作正在处理中的分配客户机。
succeeded 成功的工作已告结束,没有任何错误报告了在命令执行。
waiting for children 等待孩子的工作正在等待儿童工作完成之前,它可以设置到另一个状态。
waiting for machine 等待机器的工作已准备好处理,但目前正在等待一个可用的机器。

6.7 。工作变量

以下是内置的变量可以在命令的环境中运行的工作。
环境变量描述
HQCLIENT    文件夹路径的客户端代码的机器上运行的工作。
HQCLIENTARCH 平台的客户机正在运行的任务。它包括操作系统和机器架构。下面是一个快速名单可能的值:

     *Linux的x86_64 == “ Linux的64位
     *Linux的i686 == “ Linux的32位

HQROOT     的文件夹路径HQueue共享网络驱动器。根据不同的平台运行的机器的工作, $HQROOT将被设定为一个hqserver.sharedNetwork.mount.linux ,hqserver.sharedNetwork.mount.windows,或hqserver.sharedNetwork.mount.darwin变量发现HQueue服务器配置文件(见7 。配置)。


HQSERVER   的地址HQueue服务器。它由HQueue服务器的主机名和端口号,服务器正在侦听。
JOBID      的id当前工作。

7 。配置

您可以配置 HQueue通过修改配置文件在服务器上。该文件位于/选择/ hqueue / hqserver.ini。

修 改后的文件,您需要重新启动HQueue服务器,以便使更改生效。为此,请运行:
cd /opt/hqueue
./scripts/hqserverd restart

下面列出的配置变量,你可以修改。请注意,您可以使用% (在这里)中的任何变量值提及目录位置的配置文件。
配置变量描述
debug          调试设置为true ,以输出调试信息到服务器日志(见8。伐木) 。
email_to      的电子邮件地址发送邮件HQueue应以当系统发生错误。请务必还为smtp_server变数。
error_email_from的电子邮件地址HQueue应发送邮件时使用。请务必还为smtp_server变数。
hqserver.activeTimeout 的分钟数应该通过在客户机被认为是无效的(即没有回应) 。
hqserver.expireJobsDays的天数应该通过之前完 成的工作是永久删除从HQueue 。
hqserver.port的端口号的HQueue服务器侦听。这个变数必须具有相同的价 值,因为港口变数。
hqserver.sharedNetwork.host的名字机器主办HQueue共享网络驱动器。
hqserver.sharedNetwork.mount.darwin的挂点的HQueue共享网络驱动器,因为它应该出现在Mac OSX版客户端或用户机器。
hqserver.sharedNetwork.mount.linux的挂点的HQueue共享网络驱动器,因为它应该会出现在Linux客户端或用户机器。
hqserver.sharedNetwork.mount.windows的挂点的HQueue共享网络驱动器,因为它应该出现在Windows客户端或用户的机器。
hqserver.sharedNetwork.path 的文件夹路径HQueue共享网络驱动器上的主机。
hqserver.upgradePriority优先级别使用内置的“升级” 工作。
job_logs_dir   的文件夹的工作日志保存。
port          端口的端口号的HQueue服务器侦听。这个变数必须具有相同的价值作为hqserver.port变数。
smtp_server    邮件服务器上提供的邮件地址HQueue中所界定的hqserver.email_to变量。
sqlalchemy.default.pool_size 的最大数量的数据库连接提供的连接池。如果您看到“QueuePool限制大小”错误的服务器日志,那么你需要增加的价值,这个变量。作为一般规则的经验,设置池大小大致相等的数目,客户端机器上注册的农场。
sqlalchemy.default.max_overflow的最大数量的数据库连接创建超过价值界定sqlalchemy.default.pool_size 。此变量只需要在高峰期的影响时,需要的连接数超过最大池大小。

8 。Logging

有几个日志HQueue的跟踪调度事件,运行工作,客户端的事件,客户端的错误,等下面是一个快速列表中的一些重要的原木和所在。
日志文件位置说明
hqserver.log服务器
/ 选择/ hqueue轨道调度活动,活动由客户端和数据库连接设备。
errors.log服务器
/选择/ hqueue轨道错误抛出的HQueue服务器。
hqnode.log客户端
/首页/ hquser / hqclient轨道一般事件发生在客户端服务。

9 。该“ hquser ”帐户

在' hquser '帐户可以选择创建时增加了客户机的农场。

在Linux机器,该帐户具有下列属 性:

     *username     -hquser

    *password     -hqpass

    * id          -601

    * homedirectory -/home/hquser

    * group      -hqgroup

除了“ hquser ”帐户,一个新的集团还创建的组名称设置为“ hqgroup ”和所属组的ID设置为601。
数据库用户帐户

一 个新的MySQL数据库用户帐户时创建的HQueue服务器安装。用户名是hquser和密码是hqpass。该帐户被授予完全权限的HQueue数据库。

您应该永远不再需要登录到HQueue数据库,除非你是很想看看调度数据存储或者严重发生故障,只能固定修复的基本表。如果发生这样的失败,那么你应该联系副作用软件支持。

10 。Python API

HQueue配备了一个API ,允许您提交和查询工作的服务器上使用Python 。使用API,您必须先连接到HQueue服务器。要做到这一点,使用xmlrpclib模块:
import xmlrpclib

# Connect to the HQueue server.
hq_server =xmlrpclib.ServerProxy("http://hq_server_hostname:5000")


在上面的例子中,一个连接到服务器是由代理范围是储存在hq_server变量。使用代理参考,您可以调用的任何方法介绍如下。

getclientinfo (主机名)
    返回一个字典的资料给定的客户机。钥匙在字典中的“残疾”和“就业”。在“残疾人”值表明,如果客户端机器已被禁用。在“工作”的价值是一个清单,身份证的工作目前运行在用户端机器上。回报无如果指定主机名未注册的农场。

getHQRoot (平台)
     回报的价值$HQROOT环境变量,因为它会出现在一台机器的特定平台。平台必须是“ Linux操作系统” , “窗口”或“达尔文”。无回报的平台,如果既不是这些价值观。

getinfo (编号)
    返回一个字典的资料给定的工作。钥匙在字典中的“ startTime ” , “ endTime ” , “地位” , “进步” ,“根” , “儿童” , “父母” 。 “ startTime ” , “ endTime ” ,“地位”和“进步”的开始时间,结束时间,工作状态和工作进展情况(占) respecitvely 。“根”包含的id最顶层的工作(即没有父母的工作) ,这是一个祖先的指定工作。回报无身份证明,如果没有一个有效的工作编号。

getoutput (编号)
    归来的输出执行命令中指定的特定工作。回报无身份证明,如果没有一个有效的工作编号。

getprogress (编号)
    回报两个数字代表的分子和分母计算时使用的工作进度,以百分比(即进展=分子/分母) 。如果返回的共同点是没有,然后使用标准的100.0。如果是无返回分子,然后是0.0的进展。回报无身份证明,如果没有一个有效的工作编号。

getstatus (编号)
    归来的地位给予工作。回报无身份证明,如果没有一个有效的工作编号。

newjob ( jobspec , parentId =无, childIds = [ ] )
    提交了一份新工作的服务器上用给定的规格。jobspec可以是简称JSON字符串或字典代表规格。欲了解更多信息的结构,工作规范,见6.2 。该工作规范。parentId是一个可选参数,考虑的ID的工作,新的工作应该是一个孩子。childIds是一个可选参数,考虑名单身份证的工作,应当儿童的新工作。清单工作证件返回。

runcmd (指令)
    执行特定的命令对HQueue农场。这是通过创建一个新的无名氏的工作,其财产的命令设置为命令。这项工作是分配给客户机和加工。的id无名氏的工作是返回。

setdisabled (主机名,残疾人)
    禁用或启用用户端机器给予不同的价值停用。残疾人必须是TRUE或FALSE 。返回true如果该方法成功。退货无其他。
脚本范 例
import time
import xmlrpclib

# Connect to the HQueue server.
hq_server =xmlrpclib.ServerProxy("http://hq_server_hostname:5000")

# Define a job which renders an image from an IFD usingMantra.
job_spec = {
        "name": "Render MyImage",
        "shell": "bash",
        "command":
               "cd $HQROOT/houdini_distros/hfs;"
               + " source houdini_setup;"
               + " mantra <$HQROOT/path/to/ifds/some_frame.ifd"
}

# Submit the job to the server.
# newjob() returns a list of job ids (in case multiple jobsare passed in at once).
job_ids = hq_server.newjob(job_spec)

# Periodically check the job progress and status.
while True:
        # Get the job status.
        status =hq_server.getstatus(job_ids[0])

        # Check if the job isfinished.
        if status in ("succeeded","failed", "cancelled", "abandoned"):
               break

        # Job is not finished. Outputits progress.
        progressNum, progressDen =hq_server.getprogress(job_ids[0])
        if progressNum is not Noneand progressDen is not None:
               progress = progressNum / progressDen
        elif progressNum is notNone:
               progress = progressNum / 100.0
        else:
               progress = 0.0
        print "Progress: ",progress

# Output final status.
print "Status: ", status

资 源来源:(http://www.cgskyx.com)ID:厶戒
所属分类:编程相关Mysql    作者:新浪博客    时间:2010-11-20 0:00:00

文章导航