ruby-on-rails - 使用 Rails 运行多个后台并行作业

标签 ruby-on-rails ruby multithreading background

在我的 Ruby on Rails 应用程序中,我需要并行执行 50 个后台作业。每个作业都会创建一个到不同服务器的 TCP 连接,提取一些数据并更新事件记录对象。

我知道执行此任务的不同解决方案,但其中任何一个都是并行的。例如,delayed_job (DJ) 可能是一个很好的解决方案,只要它可以并行执行所有作业。

有什么想法吗?谢谢。

最佳答案

实际上可以运行多个 delayed_job worker。

来自 http://github.com/collectiveidea/delayed_job :

# Runs two workers in separate processes.
$ RAILS_ENV=production script/delayed_job -n 2 start
$ RAILS_ENV=production script/delayed_job stop

因此,理论上,您可以执行:

$ RAILS_ENV=production script/delayed_job -n 50 start

这将产生 50 个进程,但我不确定是否会推荐这样做,具体取决于您运行它的系统的资源。


另一种选择是使用 threads .只需为您的每个作业生成一个新线程。

使用此方法需要注意的一点是 ActiveRecord 不是线程安全的。您可以使用以下设置使其成为线程安全的:

ActiveRecord::Base.allow_concurrency = true

关于ruby-on-rails - 使用 Rails 运行多个后台并行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606028/

相关文章:

ruby-on-rails - 如何更改 f.has_many 中的标题和名称按钮? rails 上的 active_admin

ruby - 单线程还处理并发请求?

java - Android:开始新 Activity 后保持旧线程运行?

java - 我应该始终使我的 java 代码线程安全,还是出于性能原因仅在需要时才这样做?

ruby-on-rails - 如何使用 Ruby on Rails 建模模式?

ruby-on-rails - 如何根据 URL 中的参数破坏我的缓存键?

ruby - 为什么#itself 会占用 block ?

ruby-on-rails - 安装 Ruby - 无法构建 gem native 扩展

java - 如何在线程之间共享一个对象来证明它不是线程安全的?

javascript - Ruby on Rails - jQuery 使用 AJAX 获取数据