class ExampleController < ApplicationController
def getAPI
#retrieve and process data from API
end
end
如何避免控制器操作同时执行?类变量会起作用吗?
class ExampleController < ApplicationController
@@in_progress = false
def getAPI
render and return if @@in_progress
@@in_progress = true
#retrieve and process data from API
@@in_progress = false
end
end
类变量是否持久,即使应用程序以多个进程运行,例如乘客。这根本不是一个好主意吗?
如果多个用户请求相同的控制器操作,或者仅避免同时执行一个用户,这是否有效?
答案 0 :(得分:0)
您必须使用正确的工具来解决此问题,具体取决于许多因素。
编辑:请不要实现自己的互斥机制(@@in_progress
)。有些工具可以原子地处理这些东西,而且经过了充分的测试。
Edit2:如果您的控制器操作是等待来自API的同步响应,则这是一个异步运行的作业。考虑使用像Sidekiq这样的工具。