【问题标题】:Rails process batches of elements within an array concurrentlyRails 同时处理数组中的一批元素
【发布时间】:2015-11-22 00:39:51
【问题描述】:

第一次学习 Rails 中的并发和线程,因此非常感谢任何建议。

我目前有一个包含 50 个字符串的数组。我有一个第 3 方 API 调用,它接收字符串并返回一个数值。现在我只是一次调用每个字符串的 API,这需要很长时间。

在查看了this onethis other onefinally this one 之类的一些 SO 之后,似乎我必须使用某种线程来实现我想做的事情。我的计划是将数组分解成十个字符串的批次,然后对每个十个字符串的数组同时运行 5 次 API 调用,希望能大大减少时间。

我以前从来没有用 Rails 做任何类型的线程,所以我只是想知道我是否在上面第三个 SO 帖子之后走在正确的轨道上,或者我是否应该使用其他可能更适合我需要的技术。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您采用的方法取决于您的用例。您是否需要等待所有调用都对结果进行处理?可以异步吗?

    如果您正在寻找线程来分发工作,那么您提到的第三篇 SO 帖子是一个很好的方法。

    如果您的用例允许进程异步,我肯定会研究调度程序,如第一篇 SO 帖子中所述。我已经为这个目标使用了 DelayedJob,还有其他一些选择。 在一个相关主题上,我通常实现一个微服务来接收这些请求并异步处理它们,而不是在同一个应用程序中使用 DelayedJob,但这只是一个偏好问题。

    如果您使用异步方法,需要牢记的一点是,如果您在线程内访问ActiveRecord 记录,则需要显式检查数据库连接。 Rails 只处理主线程中的连接签入/签出。对此要非常小心,因为它可能会导致很难跟踪连接泄漏。

    this SO 帖子上的第一个答案显示了如何确保释放数据库连接。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-06
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多