你好
我将建立一个 rails 网站,在其中进行一些初始用户输入后,将完成一些繁重的计算(通过对 ruby 的 c 扩展,将使用多线程)。由于这些计算将消耗几乎所有的 CPU 时间(也包括内存),因此一次运行的计算不应超过一个。我也不能使用(异步)后台作业(比如延迟作业),因为 rails 必须显示该计算的结果,并且该站点应该在没有 javascript 的情况下工作。
所以我想我需要一个单独的进程,其中所有 Rails 实例都必须将它们的计算请求排队并等待答案(如果队列已满,可能会出现错误消息),一种同步作业管理器。
有谁知道是否有具有这种功能的 gem/插件?
(nanite 对我来说似乎很酷,但似乎只是异步的,所以 Rails 实例不知道计算何时完成。对吗?)
另一个想法是使用分布式 ruby (drb) 编写我自己的想法,但如果轮子已经存在,为什么还要再发明轮子呢?
如有任何帮助,我们将不胜感激!
编辑: 由于 zaius 的提示,我认为我可以异步执行此操作,所以我将尝试 resque .
最佳答案
Ruby 有互斥量/信号量。
您可以使用信号量来确保只有一个资源密集型进程在同一时间发生。
但是,在其他任务完成时阻塞前端进程的想法对我来说似乎并不合适。如果我这样做,我会使用后台工作程序,然后使用带有刷新元标记的页面(或 iframe)来持续检查进度。
这样,您可以为启用和禁用 javascript 的客户端使用相同的代码。而且您的 Web 应用程序线程不会阻塞。
关于ruby-on-rails - Ruby/Rails 同步作业管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4674151/