scheduler 模块¶
简化了后台进程¶
- class gluon.scheduler.Scheduler(db, tasks=None, migrate=True, worker_name=None, group_names=None, heartbeat=3, max_empty_runs=0, discard_results=False, utc_time=False, use_spawn=False)[源代码]¶
- 基类: - threading.Thread- 调度程序对象 - 参数
- db -- 调度程序将创建其表的DAL连接 
- tasks (dict) -- 包含name->func或none的dict。如果没有,将在环境中搜索函数 
- migrate (bool) -- 打开/关闭计划程序表的迁移 
- worker_name (str) -- 强制worker_name标识每个进程。将其保留为“无”以自动分配名称(主机名PID) 
- group_names (list) -- 处理属于此组的任务默认为 [“主要”] 如果什么都没有通过 
- heartbeat (int) -- 工人在一次执行和下一次执行之间休眠多少秒。间接设置新任务检查之间经过的秒数 
- max_empty_runs (int) -- 在退出进程之前,允许多少个循环在不处理任何任务的情况下通过。0以使进程始终处于活动状态 
- discard_results (bool) -- 调度程序将执行的详细信息存储到调度程序运行表中。默认情况下,只有在有结果时,才会保留详细信息。如果将此设置为真,则意味着即使对于返回某些内容的任务,也会丢弃结果。 
- utc_time (bool) -- 所有的日期时间计算都假定UTC是时区。记得传球 start_time 和 stop_time 相应的任务 
- use_spawn (bool) -- 对子进程使用spawn(仅适用于python3) 
 
 - disable(group_names=None, limit=None, worker_name=None)[源代码]¶
- 在工作进程上设置为禁用 group_names 任务。 - 一个残废的工人将保持生命,但它将无法处理任何等待的任务,基本上是把它置于睡眠状态。默认情况下,将选择计划程序实例化的所有组名 
 - get_workers(only_ticker=False)[源代码]¶
- 返回听写保持 worker_name : {{**columns}} 仅代表所有“已注册”工人,如果有,Ticker只返回作为Ticker运行的工人 
 - loop(worker_name=None)[源代码]¶
- 主回路。 - 这基本上是一个不断循环: - 检查工作人员是否准备好处理任务(未禁用) 
- 从队列中弹出任务 
- 如果有任务: - 生成执行器后台进程 
- 等待进程完成 
- 睡觉 heartbeat 秒 
 
- 如果没有任务: - 检查最大空运行次数 
- 睡觉 heartbeat 秒 
 
 
 - queue_task(function, pargs=[], pvars={}, **kwargs)[源代码]¶
- 队列任务。这将处理所有参数的验证。 - 参数
- function -- 函数(任何可调用的 __name__) 
- pargs -- 要传递给函数的“raw”参数。自动JSonified。 
- pvars -- 要传递给函数的“原始”Kwarg。自动JSONIFIED 
- kwargs -- 所有可用参数(基本上,每个 scheduler_task 专栏)。如果args和var在这里,那么它们应该已经被jsonified了,并且它们将覆盖parg和pvar。 
 
- 返回
- 一个dict,就像一个普通的validate_and_insert(),加上一个保存排队任务的uuid的uuid键。如果未通过验证(即某些参数无效),则ID和UUID都将为无,并且您将得到保存所发现错误的“错误”dict。 
 
 - send_heartbeat(counter)[源代码]¶
- 现有工人之间的协调。 - 它:-发送心跳-在可用的工人中选择一个断续器(唯一的进程 - 有效地将任务分派给工人) - 处理工人的状态 
- 为死去的工人“打扫房间”吗? 
- 触发任务分配给工作人员 
 
 - set_worker_status(group_names=None, action='ACTIVE', exclude=None, limit=None, worker_name=None)[源代码]¶
- 用于设置工作人员状态的内部函数。 
 - stop_task(ref)[源代码]¶
- 任务终止的快捷方式。 - 如果任务正在运行,它将终止任务,这意味着状态将被设置为失败。 - 如果任务排队,其停止时间将设置为“现在”,
- 启用标志将设置为假,状态为“已停止” 
 - 参数
- ref -- 可以是-整数:查找将由计划程序_task.id完成-字符串:查找将由计划程序_task.uuid完成 
- 返回
- -1如果任务已停止(意味着已完成更新)-如果未找到任务,或者任务未运行或排队,则为无 
 - 注解 - 实验 
 - task_status(ref, output=False)[源代码]¶
- 检索任务状态和任务的结果(可选) - 参数
- ref -- 可以是-整数:查找将由计划程序执行task.id-a字符串:查找将由计划程序执行task.uuid-a Query :根据需要查找,例如:db.scheduler_task.task_name='test1' 
- output (bool) -- 如果 True ,同时获取调度程序运行记录 
 
- 返回
- 一个单行对象,用于最后一个排队的任务。如果output==true,则还返回最后一个调度程序运行记录。调度程序运行记录是由左联接获取的,因此它可以具有所有字段==none 
 
 - terminate(group_names=None, limit=None, worker_name=None)[源代码]¶
- 将Terminate设置为Worker状态。工作进程将等待当前正在运行的任何任务执行,然后将优雅地退出。 
 
- class gluon.scheduler.TYPE(myclass=<class 'list'>, parse=False)[源代码]¶
- 基类: - object- 验证程序,用于检查字段是否为有效的JSON并验证其类型。用于 args 和 vars 调度程序任务表的 
- class gluon.scheduler.Task(app, function, timeout, args='[]', vars='{}', **kwargs)[源代码]¶
- 基类: - object- 定义从主线程传递到执行器的“任务”对象