Как получить значение локальной переменной в Mutex.synchronize? - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над созданием многопоточного кода для более быстрого анализа данных.Чтобы избежать проблемы многопоточных соединений с базой данных, я использую 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_records из lock.synchronize, в то время как заставить его ждать результата из mdb_proxy.query, я попытался выполнить следующее, но получил исключение локальной переменной

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 голосов
/ 01 марта 2019

Назначить записи для , какой блок возвращает :

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