加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby / Rails同步作业管理器

发布时间:2020-12-17 03:19:30 所属栏目:百科 来源:网络整理
导读:嗨 我将建立一个rails-website,在一些初始用户输入之后,进行了一些繁重的计算(通过c-extension到 ruby,将使用多线程).因为这些计算几乎消耗所有cpu-time(内存也是如此),所以一次运行的计算决不应该多于一个.我也不能使用(异步)后台作业(比如延迟作业),因为ra

我将建立一个rails-website,在一些初始用户输入之后,进行了一些繁重的计算(通过c-extension到 ruby,将使用多线程).因为这些计算几乎消耗所有cpu-time(内存也是如此),所以一次运行的计算决不应该多于一个.我也不能使用(异步)后台作业(比如延迟作业),因为rails必须显示该计算的结果,并且该站点应该在没有 javascript的情况下工作.
所以我想我需要一个单独的进程,其中所有rails实例必须排队他们的计算请求并等待答案(如果队列已满,可能是错误消息),一种同步作业管理器.

有没有人知道是否有这样的功能的宝石/插件?
(nanite对我来说似乎很酷,但似乎只是异步,所以rails实例不知道计算何时完成.这是正确的吗?)
另一个想法是使用分布式ruby(drb)编写我自己的,但为什么如果它已经存在又发明轮子?

任何帮助,将不胜感激!

编辑:
由于zaius的提示,我想我将能够异步地做到这一点,所以我将尝试resque.

解决方法

Ruby有互斥/信号量.

> http://www.ruby-doc.org/core/classes/Mutex.html

您可以使用信号量确保只有一个资源密集型进程同时发生.

> http://en.wikipedia.org/wiki/Mutex
> http://en.wikipedia.org/wiki/Semaphore_(programming)

但是,在其他任务完成时阻止前端进程的想法对我来说似乎不对.如果我这样做,我会使用后台工作程序,然后使用带有刷新元标记的页面(或iframe)来持续检查进度.

> http://en.wikipedia.org/wiki/Meta_refresh

这样,您可以为启用javascript和禁用的客户端使用相同的代码.并且您的Web应用程序线程没有阻止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读