Ruby桌面应用程序中的后台作业

时间:2011-09-08 18:13:31

标签: ruby user-interface background-process

我正在开发一个用Ruby编写的跨平台GUI桌面应用程序。该应用程序将使用MacRuby在Mac OS X上提供GUI,并将在其他平台上使用Qt作为GUI。该应用程序是一个多媒体工具,允许翻录CD或DVD,并将其编码为各种格式,或将多媒体文件从一种格式转码到另一种格式。

这些任务非常耗时,因此必须在后台运行,以免在执行时冻结GUI。此外,后台作业应该能够被取消和/或暂停,并且能够向GUI报告状态和进度。可能还需要为作业分配优先级,以便较高优先级的作业在较低优先级的作业之前运行,并且还要在作业之间具有依赖关系,以便作业在所有依赖关系完成之前不会开始执行。

我的问题是:哪些工具或技术最适合在Ruby GUI /桌面应用程序中处理这些类型的后台作业?我不想“滚动自己的”职业经理来产生流程或线程,并管理工作的开始和停止等。

编辑:在发布这个问题之后,我意识到我曾经问过一个类似于C ++解决方案的问题。我对这个Ruby解决方案的要求与我在此处为C ++解决方案发布的要求相同:C++ master/worker

2 个答案:

答案 0 :(得分:1)

不幸的是,我遇到的大多数Ruby后台作业运行程序都是针对Rails的。

这可能比你想要的要低一些,但我会想到EventMachine。如果您正在编写自己的高级作业/依赖性代码,则可以使用EM来驱动它并处理线程的脏工作(或者如果您愿意,可以分叉)。不确定暂停...

我建议查看EventMachine :: Deferrable和EventMachine :: DeferrableChildProcess以查看它们是否可以正常工作。

答案 1 :(得分:1)

我最近使用resque在ruby项目中执行后台作业。当然,它是一个Rails应用程序,但据我所知,没有什么可以防止有人在桌面应用程序中使用它,只要它与MacRuby兼容并且你不介意安装Redis。