首次了解Rails中的并发和线程,所以非常感谢任何建议。
我目前有一个包含50个字符串的数组。我有一个第三方API调用,它接受字符串并返回一个数值。现在我只是一次调用每个字符串上的API,这需要很长时间。
在查看了this one,this other one和finally this one之类的内容之后,似乎我必须使用某种线程来实现我想要做的事情。我的计划是将数组分解为十个字符串的批处理,然后同时对每个十个字符串数组运行5个API调用,希望它会大大减少时间。
我之前从未使用过任何类型的线程,所以我只是想知道我是否在上面的第三篇SO帖子后走上了正确的轨道,或者我是否应该使用其他可能更适合我需要的技术。
答案 0 :(得分:0)
您采取的方法取决于您的使用案例。您是否需要等待所有调用才能对结果做些什么?可以异步吗?
如果您正在研究线程以分发作品,那么您提到的第三个SO帖子是一个很好的方法。
如果您的用例允许进程异步,我肯定会查看调度程序,如第一篇SO帖子中所述。我已将DelayedJob用于此目标,还有其他一些替代方案。 在一个相关主题上,我通常会实现一个接收这些请求并将其处理为异步的微服务,而不是在同一个应用程序中使用DelayedJob,但这只是一个偏好问题。
如果使用异步方法,请记住一些非常重要的事情是,如果要访问线程内的ActiveRecord
条记录,则需要明确检出数据库连接。 Rails只处理主线程中的连接签入/签出。要非常小心,因为它可能导致连接泄漏很难跟踪。
this SO帖子的第一个答案显示了如何确保释放数据库连接。
希望有所帮助。