首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不暂停儿童工作者的情况下从sidekiq worker调用另一个worker并监控其进度

在不暂停儿童工作者的情况下,从Sidekiq Worker调用另一个Worker并监控其进度,可以通过以下步骤实现:

  1. 确保你已经熟悉并配置好了Sidekiq,它是一个用于处理后台任务的Ruby库。
  2. 创建一个新的Sidekiq Worker,用于调用另一个Worker并监控其进度。这个新的Worker可以称为"Parent Worker"。
  3. 在Parent Worker中,首先调用另一个Worker,也就是"Child Worker",并传递必要的参数。
  4. 在Parent Worker中,使用Sidekiq的API来获取Child Worker的进度。Sidekiq提供了一个名为"Sidekiq::Status"的插件,可以用于跟踪任务的进度。
  5. 在Parent Worker中,使用循环来监控Child Worker的进度。可以使用"Sidekiq::Status::get"方法来获取Child Worker的进度信息。
  6. 在Parent Worker中,根据Child Worker的进度信息,可以选择等待一段时间后再次检查进度,或者执行其他操作。
  7. 当Child Worker的任务完成后,可以根据需要执行相应的操作,比如记录日志、发送通知等。

下面是一个示例代码,演示了如何在Parent Worker中调用Child Worker并监控其进度:

代码语言:txt
复制
require 'sidekiq'
require 'sidekiq-status'

class ChildWorker
  include Sidekiq::Worker
  include Sidekiq::Status::Worker

  def perform
    # Child Worker的具体任务逻辑
    # 这里可以是任何你想要执行的后台任务
    # 可以使用Sidekiq::Status提供的方法来更新任务进度
  end
end

class ParentWorker
  include Sidekiq::Worker

  def perform
    # 调用Child Worker并传递参数
    child_worker = ChildWorker.perform_async

    # 监控Child Worker的进度
    while Sidekiq::Status::queued?(child_worker) || Sidekiq::Status::working?(child_worker)
      progress = Sidekiq::Status::get(child_worker)

      # 根据进度信息执行相应操作
      # 这里可以是记录日志、发送通知等
      puts "Child Worker进度:#{progress['pct_complete']}%"

      sleep 1
    end

    # Child Worker任务完成后的操作
    puts "Child Worker任务已完成"
  end
end

这个示例代码使用了Sidekiq和Sidekiq-Status库来实现从Sidekiq Worker调用另一个Worker并监控其进度。你可以根据实际需求进行修改和扩展。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 移动开发(移动推送、移动分析):https://cloud.tencent.com/product/mobile
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(Tencent XR):https://cloud.tencent.com/product/xr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TensorFlow 分布式之 ClusterCoordinator

如果被执行工作者在结束之前变得不可用,该函数将在另一个可用工作者上重试。 如果任何先前安排函数出现错误,schedule 将抛出其中任何一个错误,清除到目前为止收集错误。...前面提到了,在 _create_per_worker_resources 会调用 create_resource,为每一个工作者建立自己资源。...在这种情况下,除了重置失败参数服务器外,用户还应该重新启动协调器,使其重新连接到工作者和参数服务器,重新创建变量,加载检查点。...因此建议使用某些工具以便丢失训练进度: 因此,在用户程序中,必须定期保存检查点文件,并在程序开始时恢复。...对于一个自定义训练循环,你应该定期检查模型变量,并在训练开始前检查点(如果有的话)加载模型变量。如果优化器有检查点,训练进度可以 optimizer.iterations 中大致推断出来。

74030

java线程池(四):ForkJoinPool使用及基本原理

停用等待,排队遇到了一些固有的种类,最值得注意是,产生任务线程可能会错过看到(和发信号)另一个寻找worker但是尚未进入等待队列线程。...此处和其他地方使用稳定性检查是快照技术概率变体,请参阅Herlihy&Shavit。工作者放弃尝试仅在两次扫描总和稳定之后才停用它。...另外,由于活动工作人员通常是在重新扫描或旋转而不是阻塞,所以我们设置清除了WorkQueues“ parker”字段,以减少不必要unpark调用。...调用线程以及此后终止所有其他工作线程,通过设置(qlock)状态。取消未处理任务唤醒它们,反复执行直到稳定为止,以帮助终止其他线程(但循环受工作线程数量限制) )。...(4)我们使用校验和来限制找到工作尝试次数,然后回退到暂停该工作程序,并在必要时将其替换为另一个

15.2K25
  • TensorFlow 分布式之 ParameterServerStrategy V2

    如果被执行工作者在结束之前变得不可用,该 tf.function 将在另一个可用工作者上重试。 由于函数执行不是原子性,所以一个函数可能被执行多次。...BackupAndRestore :确保训练进度被自动备份,并在集群出现不可用情况(中止或抢占)时恢复; TensorBoard :将进度报告保存为摘要文件,在 TensorBoard 工具中进行可视化...它为每个工作者创建一个数据集,返回一个容器对象。你可以调用 iter 方法来创建一个属于每个工作者(per-worker迭代器。...不支持在不重启协调者任务情况下参数服务器故障中恢复。...你应该将这些调用转换为epoch级调用适当选择 steps_per_epoch,以便每隔 steps_per_epoch 步数调用这些回调。

    1.2K20

    TensorFlow 分布式 DistributedStrategy 之基础篇

    任何可能惰性创建变量函数(例如,Model.call(),追踪一个tf.function,等等)也应该在作用域内调用。 变量创建另一个来源可以是检查点恢复。...当高层训练框架方法, model.compile,model.fit 等被调用时,捕获范围将被自动输入,相关策略将被用来分配训练等。...这个数据集接收了一个现有的数据集,尝试自动找出如何在工作者情况下使用图来对数据集进行分片。...当多个客户在不同时间回溯时,回溯对于多客户端来说是有问题,因为回溯改变了 tf.function 集合键(collective keys),导致客户之间匹配。...dataset_fn 将在每个 worker CPU 设备上被调用,每次调用都会生成一个数据集,在此调用之中,该 worker 每个副本都会数据集获取一批输入(例如,如果一个 worke r有两个副本

    1.3K10

    Web Workers RPC

    如果此时回调队列被阻塞任务过多时,大多数浏览器都会抛出一个提示信息,征求是否要关闭网页 那么,我们如何在阻塞UI使浏览器正常响应情况下执行繁重代码呢?...引言 javascript 是单线程编程语言,这使得我们开发过程中不必关注因多线程导致复杂场景(,死锁)。 单线程意味着某一时刻只能做一件事情!...Comlink 解决了通信问题,借助 Proxy 可以忽略所有繁琐通信细节(无需考虑事件订阅所带来复杂性),极大降低了 Worker 维护成本。...接受单个参数(要发送给worker数据)。数据可以是由结构化克隆算法处理任何值或JavaScript对象,包括循环引用。...例如,如果一个对象用属性描述符标记为 read-only,它将会被复制为 read-write,因为这是默认情况下。 原形链上属性也不会被追踪以及复制。

    69310

    专用工作者线程

    创建专用工作者线程创建专用工作者线程最常见方式是加载 JavaScript 文件。把文件路径提供给 Worker 构造函数,然后构造函数再在后台异步加载脚本实例化工作者线程。...专用工作者线程生命周期调用 Worker()构造函数是一个专用工作者线程生命起点。调用之后,它会初始化对工作者线程脚本请求,并把 Worker 对象返回给父上下文。...一旦调用了 terminate(),工作者线程消息队列就会被清理锁住,这也是只是打印"foo"原因。注意 close()和 terminate()是幂等操作,多次调用没有问题。...使用 MessageChannel无论主线程还是工作者线程,通过 postMessage()进行通信涉及调用全局对象上方法,定义一个临时传输协议。... 2019 年开始,有些浏览器开始逐步重新启用这一特性。既不克隆,也转移,SharedArrayBuffer 作为 ArrayBuffer 能够在不同浏览器上下文间共享。

    12710

    使用Celery构建生产级工作流编排器

    Orchestration worker:这是整个工作流中央协调器,它决定如何顺序执行任务、如何控制消息流建立摄取到分析再到消费数据管道。...使用正确池配置正确 worker 可以实现更快速数据处理目标,在编排 worker 本身情况下,从一个任务移动到另一个任务可以满足高 RPS 和并发处理。...对于一个长时间运行且需要从队列中立即处理任务,如果将乘数改成 1,它将只轮询能够队列中获取并发处理能力数量任务,从而允许另一个 Workers 轮询队列中消息。...缓存中 Redis:对于中频使用中间资源, json 文件或数据库调用,可以使用所有工作人员共享公共 Redis 进行缓存。...理想情况下,对于高 RPS 工作流,工作进程必须立即从队列中使用一条消息进行处理。如果流量很大,则更多侦听同一队列工作进程将解决此问题。

    32010

    【crossbeam系列】3 crossbeam-deque:work-stealing算法

    fn steal(&self) -> Steal; // 队列窃取多个任务交给目标工作者 fn steal_batch(&self, dest: &Worker) -> Steal; // 队列窃取多个任务交给工作者弹出第一个任务 fn steal_batch_and_pop(&self, dest: &Worker)...>) -> Steal; // 队列窃取多个任务交给工作者弹出第一个任务 fn steal_batch_and_pop(&self, dest: &Worker)...,可以写出如下窃取逻辑: 先从工作者队列本地试图获得一个任务 试图全局注水器队列中窃取一打任务 试图另一个线程窃取一个任务 use crossbeam_deque::{Injector...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    22820

    深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构

    理想状态应该是:在训练过程中可以自动增加或者减少worker数量。而且在worker数量变化时,不会中断训练任务,做到平滑过渡。 目前Horovod无法在资源有限情况下执行。...Driver在运行之后会定期调用这个 bash 脚本来对集群监控,当worker发生变化时,discover_host 脚本会返回最新worker状态,Driver 根据 discover_host...现有worker 节点收到通知后,会暂停当前训练,记录目前迭代步数,调用 shutdown 和 init 重新构造通信环。Driver也会在新节点上启动worker,扩充进程数目。...0x02 示例代码 2.1 python代码 我们官方文档中找出 TF v2 示例代码看看,关键之处是使用 @hvd.elastic.run 对 train 做了一个封装,并且传入了一个 TensorFlowKerasState...一般来说,如果你硬件设施是可靠与稳定,并且你编排系统会在任务节点移除时提供足够告警,你就可低频次调用 state.commit() 函数,同时只在每个batch结束时调用相对耗时 state.check_host_updates

    96720

    分布式计算框架Gearman原理详解

    Gearman提供您应用程序调用客户端和工作者API来与Gearman作业服务器(也称为gearmand)交谈,因此您不需要处理网络或作业映射。...这个例子在PHP中给出, 我们首先编写一个客户端应用程序,负责发送作业等待结果,以便打印出来。它通过使用Gearman客户端API来发送一些与函数名相关数据,在这种情况下是函数reverse。...然后,Gearman工作者API接受这个请求,运行该功能my_reverse_function,通过作业服务器将该功能结果发送回客户端。...您所见,客户端和工作者API(以及作业服务器)处理作业管理和网络通信,因此您可以专注于应用程序部分。有几种不同方法可以在Gearman中运行作业,包括异步处理和优先作业背景。...Gearman框架中一个问题 典型部署结构看出,两个Job server之间是没有连接。也就是Job server间是共享background job

    80340

    如何用Golang处理每分钟100万个请求

    传统上,我们会研究创建一个工人层架构,利用诸如以下东西: Sidekiq Resque DelayedJob Elasticbeanstalk Worker Tier RabbitMQ 还有等等其他技术手段...设置 2 个不同集群,一个用于 Web 前端,另一个用于 worker 处理进程,这样我们就可以扩大我们可以处理后台工作量。...以下是延迟率增长图: 图片 更好解决方案 我们决定在使用 Go 通道时使用一种通用模式,以创建一个 2 层通道系统,一个用于 Job 队列,另一个用于控制同时在 Job 队列上操作 Worker 数量...这个想法是将上传到 S3 数据并行化到某种程度上可持续速度,这种速度既不会削弱机器也不会开始 S3 生成连接错误。 所以我们选择创建 Job/Worker 模式。...JobQueue <- work } w.WriteHeader(http.StatusOK) } 在我们 Web 服务器初始化期间,我们创建一个 Dispatcher 调度器调用

    96130

    Web性能优化之Worker线程(上).md

    「单线程 JS 环境」,每个环境中指令则可以「并行执行」 工作者线程可以「共享某些内存」:工作者线程能够使用 SharedArrayBuffer 在多个环境间共享内容 「区别」 worker线程「共享全部内存...」:除了 SharedArrayBuffer 外,工作者线程进出数据需要「复制」或「转移」 worker线程不一定在同一个进程里:例如,Chrome Blink 引擎对共享worker 线程和服务...postMessage():与 worker.postMessage()对应方法,用于「工作线程内部向父上下文发送消息」 close():与 worker.terminate()对应方法,用于「立即终止工作者线程...没有为工作者线程提供清理机会,脚本会「突然停止」 「importScripts()「:用于向工作线程中」导入任意数量」脚本 生命周期 ❝调用 Worker()构造函数是一个专用工作线程「生命起点」...可转移对象 使用可转移对象可以把「所有权」从一个上下文转移到另一个上下文。在不太可能在上下文间复制大量数据情况下,这个功能特别有用。

    1.3K10

    使用 Mastodon 搭建个人信息平台:调优篇

    这篇文章或许同样是你能够找到为数不多关于如何在容器环境中搭建和优化 Mastodon 服务内容。...因为我们使用是容器中 Mastodon,为了保证“打补丁”程序和运行中一致,可以运行容器中将所需要文件复制到本地。...20) booted in 0.0s, phase: 0 让 Sidekiq 运行更有安全感 Sidekiq 负责处理所有的异步任务和计划任务,对于这类组件,一般建议是在资源冗余情况下,尽快让任务计算完毕...所以并不建议对进行设置,将任务并发处理量减少。...不过 Mastodon 官方也好,社区也罢,并没有针对 Mastodon 做服务运行状况检查,所以这里我们针对 Sidekiq 做一个简单健康检查,保障服务能够在极端情况下自动恢复即可。

    2.4K11

    Service Workers - JavaScript API 简介

    就像已经指出定义一样,Service Worker 是网络代理。 这意味着它们可以控制页面中所有网络请求,并且可以对进行编程,使用缓存进行响应。...') 注意: Service Worker 注册路径决定了 scope 默认作用范围。...另外应意识到这一点:Service Worker 没有页面作用域概念,作用域范围内所有页面请求都会被当前激活 Service Worker监控。...定期后台同步 正如在引言中已经提到那样,Service Worker 与其他服务工作者在一个单独线程上运行,所以即使关闭页面,它们也可以执行代码。 此功能对于执行后台同步和提供推送通知很重要。...要实现此目的一个要求是,该网站已作为移动设备上 PWA 安装添加到主屏幕。 推送通知 Service Worker另一个类似本机特性是推送通知。

    94220

    深入理解Go语言内存模型和逃逸分析

    Go语言内存模型概述内存模型定义内存模型描述了程序如何在并发环境中访问和修改内存。Go语言内存模型定义了如何在不同goroutines之间传递数据以及如何保证数据一致性。...垃圾回收机制Go语言垃圾回收器采用标记-清除算法,自动管理内存分配和释放,开发者无需手动管理内存。垃圾回收器会定期扫描堆内存,标记不再使用对象释放占用内存。...Pool模式Worker Pool模式是一种常见并发模型,通过一组工作者goroutine来处理任务队列。...定义worker函数,工作者jobs通道接收任务,处理后将结果发送到results通道。在main函数中,创建jobs和results通道,启动工作者goroutine。...在main函数中,依次调用generate和square函数,构成一个简单Pipeline。输出最终结果记录处理时间。我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    16000

    Web性能优化_知识点精讲

    Worker类型 (DSS) Worker 线程规范中定义了「三种主要」工作者线程 专用工作线程Dedicated Web Worker 专用工作者线程,通常简称为工作者线程、Web Worker...Web Worker 专用工作线程是最简单 Web 工作者线程,网页中脚本可以创建专用工作者线程来执行在「页面线程之外」其他任务。...这可以让网页在「没有网络连接」情况下正常使用,因为部分或全部页面可以服务工作线程缓存中提供服务。...可以通过使用 defer 和 async,告诉浏览器在等待脚本下载期间阻止解析过程 布局中瓶颈点--重排 ---- SPA 提速 监控 SPA 性能 Lighthouse:一个开源「自动化工具」...可以使用一个「高优先级」调用来获取First Meaningful Paint所需数据,使用另一个回调来「惰性加载」页面所需其余数据。

    1.3K20

    带你认识 flask 后台作业

    英文这通过Job.fetch()完成,它会Redis存在中数据中加载Job实例。get_progress()方法建立在get_rq_job()基础之上,返回任务进度百分比。...然后我开始考虑如何在这个函数运行时报告进度。另外通过job.meta字典传递进度信息之外,我还想将通知推送给客户端,刹车自动动态更新完成百分比。逐步,我将使用我在第二十一章中生成通知机制。...任务,确保执行任何数据库更改,因为执行本次调用父父更改也写入数据库 11 实现导出任务 现在所有的准备工作已经完成,可以开始编写导出函数了。...使用了i和total_posts,在每个循环迭代我都可以使用0到100数字来更新任务进度 您可能会好奇我为什么会在每个循环time.sleep(5)迭代中加入调用。...本处你可以运行命令rq worker microblog-tasks 再打开另一个终端窗口,使用flask run (记得先设置 FLASK_APP变量)命令启动Flask应用 13 进度通知 为了完善这个功能

    2.9K10
    领券