类:Mongoid::Contextual::Mongo::DocumentsLoader Private
- 继承:
-
对象
- 对象
- Mongoid::Contextual::Mongo::DocumentsLoader
- 扩展方式:
- 可转发
- 定义于:
- lib/mongoid/contextual/ mongo /documents_loader.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
根据提供的条件加载文档。
实例属性摘要折叠
-
#criteria ⇒ Mongoid::Criteria
private
指定应加载哪些文档的条件。
类方法摘要折叠
-
。 executor (名称 = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor
private
根据 Mongoid 配置选项返回合适的执行程序。
-
。 global_thread_pool_async_query_executor ⇒ Concurrent::ThreadPoolExecutor
private
当 async_query_executor 配置选项设立为 :global_thread_pool 时,返回要使用的异步执行程序。
-
。 immediate_executor ⇒ Concurrent::ImmediateExecutor
private
返回当 async_query_executor 配置选项设立为 :immediate 时要使用的同步执行程序。
实例方法摘要折叠
-
#执行⇒ Array<Mongoid::Document>
private
从数据库加载“@criteria”指定的记录,并将其转换为“@klass”类型的 Mongoid 文档。
-
#initialize (view, klass,riteria, executor: self.class.executor) ⇒ DocumentsLoader
构造函数
private
实例化文档加载器实例,并立即使用提供的执行器安排其执行。
-
#待处理? ⇒ true | false
private
无论加载程序处于挂起状态,都返回 false 或 true。
-
#已启动? ⇒ true | false
private
无论加载程序处于启动状态,都返回 false 或 true。
-
# unschedule ⇒ 对象
private
将加载器标记为未计划。
Association::EagerLoadable 中包含的方法
#eager_load 、 #eager_loadable? , #preload
构造函数详情
#initialize (view, klass,riteria, executor: self.class.executor) ⇒ DocumentsLoader
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
实例化文档加载器实例,并立即使用提供的执行器安排其执行。
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 89 def 初始化(查看, klass, 条件, 执行器: self.class.执行者) @view = 查看 @klass = klass @criteria = 条件 @mutex = 互斥锁.new @state = :pending @future = 并发::Promises.future_on(执行者) do 开始 && 执行 end end |
实例属性详细信息
#criteria ⇒ Mongoid::Criteria
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回指定应加载哪些文档的条件。 此处公开是因为“Association::EagerLoadable”中的“eager_loadable?”方法期望该方法可用。
75 76 77 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 75 def 条件 @criteria end |
类方法详细信息
。 executor (名称 = Mongoid.async_query_executor) ⇒ Concurrent::ImmediateExecutor | Concurrent::ThreadPoolExecutor
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
根据 Mongoid 配置选项返回合适的执行程序。
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 61 def self.执行者(名称 = Mongoid.async_query_executor) 案例 名称.to_sym when :immediate immediate_executor when :global_thread_pool global_thread_pool_async_query_executor else 提高 Errors::InvalidQueryExecutor.new(名称) end end |
。 global_thread_pool_async_query_executor ⇒ Concurrent::ThreadPoolExecutor
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
当 async_query_executor 配置选项设置为 :global_thread_pool 时,返回要使用的异步执行程序。 此执行程序使用线程池在后台线程上运行操作。
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 32 def self.global_thread_pool_async_query_executor create_pool = Proc.new do |并发| 并发::ThreadPoolExecutor.new( min_threads: 0, max_threads: 并发, max_queue: 并发 * 4, Fallback_policy: :caller_runs ) end 并发 = Mongoid.global_executor_concurrency || 4 @@global_thread_pool_async_query_executor ||= create_pool.调用(并发) if @@global_thread_pool_async_query_executor.max_length != 并发 old_pool = @@global_thread_pool_async_query_executor @@global_thread_pool_async_query_executor = create_pool.调用(并发) old_pool.shutdown end @@global_thread_pool_async_query_executor end |
。 immediate_executor ⇒ Concurrent::ImmediateExecutor
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回当 async_query_executor 配置选项设立为 :immediate 时要使用的同步执行程序。 此执行器在当前线程上运行所有操作,并根据需要进行阻塞。
22 23 24 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 22 def self.immediate_executor @@immediate_executor ||= 并发::ImmediateExecutor.new end |
实例方法详细信息
#execute ⇒ Array< Mongoid::Document >
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
从数据库加载“@criteria”指定的记录,并将其转换为“@klass”类型的 Mongoid 文档。
此方法由创建加载器实例时计划的任务(可能是异步)调用。 但是,如果希望立即在调用者线程上执行加载,则可以直接调用此方法。
调用此方法不会更改加载程序的状态。
152 153 154 155 156 157 158 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 152 def 执行 文档 = @view.map do |doc| 工厂.from_db(@klass, doc, @criteria) end ager_load(文档) if ager_loadable? 文档 end |
#待处理? ⇒ true | false
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
无论加载程序处于挂起状态,都返回 false 或 true。
待处理状态表示加载程序的执行已安排,但尚未启动。
107 108 109 110 111 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 107 def 待处理? @mutex.同步 do @state == :pending end end |
#已启动? ⇒ true | false
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
无论加载程序处于启动状态,都返回 false 或 true。
已启动状态表示加载程序已开始执行。 请注意,即使执行完成(成功或失败),加载器也会保持此状态。
121 122 123 124 125 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 121 def 开始? @mutex.同步 do @state == :started end end |
# unschedule ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将加载器标记为未计划。
如果加载器被标记为未调度,则不会执行。 加载文档的唯一选项是直接调用“execute”方法。
请注意,如果任务已经开始执行,则取消计划没有任何影响。
134 135 136 137 138 |
# File 'lib/mongoid/contextual/ mongo /documents_loader.rb', line 134 def 取消安排 @mutex.同步 do @state = :canceled 除非 @state == :started end end |