簡體   English   中英

如果使用 jruby 在線程中運行,活動記錄查詢不會終止

[英]active record query does not terminate if run in thread using jruby

我有一個查詢在 jruby 的一個線程中查找 postgres -tables。

盡管兩個我沒有區別,但活動記錄不會因某些表的某些查詢而終止,盡管它確實會因某些其他表而終止。

我檢查了它是否依賴於這些表的索引,或者它們的結構,但它不,或者我找不到它,僅限於我可以區分的所有結構。

因此,我使用 raw-sql 編寫了相同的算法並且它起作用了。

因此,gem 'activerecord-jdbcpostgresql-adapter', '>= 61.0-java' 肯定存在錯誤。

我使用'rails'、'~> 6.1.0'和jruby-9.2.14.0。

它的工作原理如下: Thread.new { query = <<~SQL [...] SQL ActiveRecord::Base.connection.execute(query) }

它僅適用於某些表,但不適用於所有表: Thread.new { Table.where(p1: s1) }

遺憾的是,到目前為止,我無法提示您如何重現它,因為我沒有發現表格的不同之處。 問我,如果你有任何背景啟發的猜測。

作為一種解決方法,可以限制類似調用的線程數。

數組1 = [...]; 線程索引 = 0; max_threads = 2; 索引 = 0; 繼續=真; 結果 = []; 線程 = [] 同時繼續; while thread_index < max_threads 線程 << Thread.new { if array1[index] == nil; 繼續=假; 別的; 結果<<函數(數組1 [索引]); 結束 } 索引 += 1; thread_index += 1 結束threads.join; thread_index = 0 結束

那么不知何故,沒有為所有數據庫表查找最大線程數?

受限於我的理解程度,我想說,上述解決方法不是節省線程的,因為它可能是在外部使用胎面?!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM