如何在Mutex.synchronize中获取局部变量值?

时间:2019-03-01 07:06:24

标签: mysql ruby multithreading mutex synchronize

我正在研究使代码具有多线程的功能,以便更快地进行数据分析。为了避免多线程数据库连接的问题,我使用Mutex对其进行锁定。

lock = Mutex.new()
thread_num.times do |i|
    threads << Thread.new do
        lock.synchronize{
             records = db_proxy.query(account_id) 
             result = process_records(records) 
        }        
    end
end

process_records也很耗时,但是作为常规方法,它支持多线程调用。它需要来自mdb_proxy.query的输出,如何将process_recordslock.synchronize中取出,同时让它等待mdb_proxy.query的结果,我尝试遵循但得到了局部变量异常< / p>

lock = Mutex.new()
    thread_num.times do |i|
        threads << Thread.new do
            lock.synchronize{
                 records = mdb_proxy.query(account_id) 
            }   
            result = process_records(records) 
        end
    end

1 个答案:

答案 0 :(得分:3)

将记录分配给什么块返回

records = lock.synchronize { mdb_proxy.query(account_id) }