2015-11-22 76 views
0

第一次了解Rails中的并发和线程处理,因此非常感谢任何建议。Rails同时处理阵列中的多个元素批处理

我目前有一个50个字符串的数组。我有一个第三方API调用,它接受字符串并返回一个数字值。现在,我只是简单地调用每个字符串的API,这需要很长时间。

看过几个SO之后,例如this one,this other onefinally this one,看起来我必须使用某种线程来实现我想要做的事情。我的计划是将数组分成十个字符串,然后在每个十个字符串的每个数组上同时运行5个API调用,希望能够大幅缩短时间。我之前从未做过任何类型的线程,所以我只是想知道,如果我在上面的第三个SO帖子后面的正确轨道上,或者如果我应该使用其他技术,可能会更好地满足我的需要。

回答

0

你采取的方法取决于你的用例。你是否需要等待所有的电话才能做出结果?它可以是异步的吗?

如果你正在寻找线程来分配工作,那么你提到的第三个SO贴子是一个好办法。

如果你的用例允许进程是异步进程,那么我肯定会调查一个调度器,正如第一篇SO文章中提到的那样。我为此目标使用了DelayedJob,还有其他一些选择。 在一个相关主题上,我通常实现一个微服务,它接收这些请求并将它们异步处理,而不是在同一个应用中使用DelayedJob,但这只是一个优先选择。

如果你使用异步方法,记住一点非常重要的是,如果你正在访问线程内的ActiveRecord记录,你需要明确地检查数据库连接。 Rails仅处理主线程中连接的检入/退出。请务必小心,因为这会导致连接泄漏难以追踪。

this SO post上的第一个答案显示了如何确保db连接被释放。

希望有所帮助。