gpt4 book ai didi

ruby-on-rails - Rails - 从 Controller 运行 rake 任务或新线程?

转载 作者:行者123 更新时间:2023-12-03 13:13:01 26 4
gpt4 key购买 nike

我有一个类 (/lib/updater.rb) 对数据库进行大量更新(调用外部服务器、计算...)。通常这个任务由服务器的 cron 调用(rake/lib/tasks/launch_updater.rake 启动 updater.rb),但我想给也有机会从客户端手动启动它。

此时,用户可以从客户端点击一个按钮并以这种方式启动它:

# the controller
Thread.new {
Updater.start
}

这是一个很好的解决方案还是直接从 rake 任务启动更好?

# something like this from the controller
Rake::Task[params[:task]].reenable
Rake::Task[params[:task]].invoke

任务应该是无阻塞的(用户应该在应用程序上正常导航,而无需等待任务结束)。

哪个更好,为什么?

最佳答案

对我的问题进行了一些研究后,我发现了以下注释:

  • 使用线程时,使用的 CPU 与应用程序的 CPU 相同(即使您有一个多核服务器,CPU 也是相同的)。如果您想使用 Thread,Thread 任务不应“繁重”,否则您可能会遇到 CPU 问题(应用处理速度慢)。
  • 当您从终端或服务器 cron 启动 Rake 任务时,这应该占用运行较轻的进程的 CPU。但是,如果您从应用程序启动任务,我认为 CPU 甚至与应用程序相同。
  • 处理繁重任务的更好解决方案是使用延迟服务,通过这种方式,作业任务应该占用应用程序 CPU 之外的另一个 CPU,而不会影响应用程序的性能:

关于ruby-on-rails - Rails - 从 Controller 运行 rake 任务或新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18508106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com