在我的 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/